Je suis resté coincé en essayant le processus de synchronisation de Volley (Java)

Essayez le traitement synchrone

Sur la base des informations selon lesquelles Volley peut également effectuer un traitement synchrone, les sources suivantes ont été exécutées.

app/build.gradle


dependencies {
    implementation 'com.android.volley:volley:1.1.1'
}

MyActivity.java


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String url = "https://example.com/";

        RequestFuture<String> future = RequestFuture.newFuture();
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, future, future);

        RequestQueue queue = Volley.newRequestQueue(MyActivity.this);
        queue.add(stringRequest);

        try {
            String result = future.get(10000, TimeUnit.MILLISECONDS);
            Log.d(TAG, result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Fin du temps

J'obtiens une exception java.util.concurrent.TimeoutException. Je ne peux pas voir la cause parce que je peux seulement dire que l'exception a été levée en lisant Logcat.

Exécuter (résoudre) dans un thread non-UI

Depuis Android3.0, NetworkOnMainThreadException se produit lorsque le traitement de synchronisation est exécuté dans le thread d'interface utilisateur. Apparemment, Volley ne tombe pas et s'arrête.

Lorsque je l'ai réécrit comme suit en utilisant AsyncTask, j'ai pu l'obtenir normalement.

MyActivity.java


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        new AsyncTask() {
            @Override
            protected Object doInBackground(Object[] objects) {
                String url = "https://example.com/";

                RequestFuture<String> future = RequestFuture.newFuture();
                StringRequest stringRequest = new StringRequest(Request.Method.GET, url, future, future);

                RequestQueue queue = Volley.newRequestQueue(MyActivity.this);
                queue.add(stringRequest);

                try {
                    String result = future.get(10000, TimeUnit.MILLISECONDS);
                    Log.d(TAG, result);
                } catch (Exception e) {
                    e.printStackTrace();
                }

                return null;
            }
        }.execute();
    }

Recommended Posts

Je suis resté coincé en essayant le processus de synchronisation de Volley (Java)
Je suis resté coincé en étudiant Java SE 7/8 Bronze
Je suis resté coincé dans le fichier
[JAVA] Project Euler, je suis resté coincé au Q8, alors prenez note
[RSpec] Ce que je suis resté bloqué lorsque j'ai écrit le test du mailer (processus de réinitialisation du mot de passe)
Où je suis resté coincé dans le "tutoriel des rails" d'aujourd'hui (05/10/2020)
Où je suis resté coincé dans le "tutoriel des rails" d'aujourd'hui (06/10/20)
Où je suis resté coincé dans le "tutoriel sur les rails" d'aujourd'hui (04/10/20)
Où je suis resté coincé dans le "tutoriel sur les rails" d'aujourd'hui (07/10/20)
Processus de mise en mémoire tampon Java
Processus de vérification Java
Je suis resté coincé dans un clone d'un tableau à deux dimensions