Warten Sie, bis das Ergebnis der Asynchronen Volley Anfrage und senden Sie es

Unten ist eine Methode, bei der ich versucht bin, um eine Benutzer-Objekt durch Aufruf getSelf(). Problem ist, dass das Ergebnis ist immer null, da die Volley-Anfrage noch nicht fertig zum Zeitpunkt der Rückgabe das Ergebnis. Ich bin etwas neu auf asynchrone Prozesse, also bin ich nicht sicher der beste Weg, um die Methode warten auf das Ergebnis des API-Aufrufs der UserBean Objekt. Kann mir jemand etwas Hilfe?

public UserBean getSelf(String url){

    RpcJSONObject jsonRequest = new RpcJSONObject("getSelf", new JSONArray());

    JsonObjectRequest userRequest = new JsonObjectRequest(Request.Method.POST, url, jsonRequest, 
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {

                String result;
                try {
                    result = response.getString("result");
                    Gson gson = new Gson();
                    java.lang.reflect.Type listType = new TypeToken<UserBean>() {}.getType();

                    //HOW DO I RETURN THIS VALUE VIA THE PARENT METHOD??
                    userBean = (UserBean) gson.fromJson(result, listType);

                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
               Log.e("Error:", error.toString());
               finish();
            }
        }
    );

    this.queue.add(userRequest);


    return userBean;

}   
Sie sollten nicht tun, was Sie zu tun versuchen. Der Grund für die asynchrone Verarbeitung ist so, dass Sie nicht das Programm blockieren oder UI während "langsame" Dinge. So Ihr onResponse sollten, Benachrichtigen Sie den Anrufer, dass das Objekt verfügbar ist, und zeigen Sie es. Wenn Sie den Benutzer zu warten, wirf ein Fortschritts-dialog, und Sie dann zu entlassen, wenn das Ergebnis verfügbar ist.
Auch überprüfen Sie Ihre Antwort. Könnte es sein null.

InformationsquelleAutor chinabean | 2013-10-16

Schreibe einen Kommentar