Ich blieb beim Versuch von Volleys Synchronisationsprozess (Java) hängen.

Versuchen Sie die synchrone Verarbeitung

Basierend auf den Informationen, dass Volley auch eine synchrone Verarbeitung durchführen kann, wurden die folgenden Quellen ausgeführt.

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();
        }
    }

Zeitüberschreitung

Ich erhalte eine java.util.concurrent.TimeoutException. Ich kann die Ursache nicht erkennen, da ich nur durch Lesen von Logcat feststellen kann, dass die Ausnahme ausgelöst wurde.

In einem Nicht-UI-Thread ausführen (lösen)

Seit Android 3.0 tritt NetworkOnMainThreadException auf, wenn die Synchronisationsverarbeitung im UI-Thread ausgeführt wird. Anscheinend fällt Volley nicht und fällt aus.

Als ich es mit AsyncTask wie folgt umschrieb, konnte ich es normal abrufen.

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

Ich blieb beim Versuch von Volleys Synchronisationsprozess (Java) hängen.
Ich blieb beim Studium von Java SE 7/8 Bronze stecken
Ich blieb in File stecken
[JAVA] Projekt Euler, ich steckte im achten Quartal fest
[RSpec] Was ich feststeckte, als ich den Mailer-Test (Passwort-Reset-Prozess) schrieb
Wo ich im heutigen "Rails Tutorial" (2020/10/05) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/06) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/04) stecken geblieben bin
Wo ich im heutigen "Rails Tutorial" (2020/10/07) stecken geblieben bin
Java-Pufferprozess
Java-Überprüfungsprozess
Ich steckte in einem Klon eines zweidimensionalen Arrays fest