Android: Wie gebe ich asynchrones JSONObject von der Methode mit Volley zurück?

Lesezeit: 3 Minuten

Ich versuche, das JSON-Objekt auf folgende Weise zurückzubekommen:

JSONObject jsonObject = http.makeRequest("GET", "https://api.twitter.com/1.1/search/tweets.json", null);

Die allgemeine Methode zum Verarbeiten aller HTTP-Anfragen ist wie folgt

public void makeRequest(String method, String url, Array params) {

    // Request a string response from the provided URL.
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(getRequestMethod(method),
            url,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    processResponse(Constants.Global.SUCCESS, null, response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    try {
                        mStatusCode = error.networkResponse.statusCode;
                        VolleyLog.d(Constants.Global.ERROR, "Error: " + error.getMessage());
                        Logger.e(error.getMessage());
                    } catch (Exception e) {
                        Logger.e(e.getMessage());
                        mStatusCode = 0;
                    }
                    Logger.e(mStatusCode.toString());
                    processResponse(Constants.Global.ERROR, mStatusCode, null);
                }
            });
    // Add tag to request for bulk cancelling
    //jsonObjReq.setTag()
    queue.add(jsonObjReq);
}

Und die Methode zum Verarbeiten des JSON-Ergebnisses ist folgende:

private JSONObject processResponse(String resultState, Integer httpStatusCode, JSONObject responseData) {
        try {
            // First check that result state is error or the success
            if (resultState.equals(Constants.Global.SUCCESS)) {
                Logger.i("Response is success");
                Logger.i(responseData.toString());
                //TODO: ADD SUCCESS OBJECT CREATION
            }
            if (resultState.equals(Constants.Global.ERROR)) {
                Logger.e("Response is error");
                //TODO: ADD ERROR HANDLING AND ERROR OBJECT CREATION
            }

        } catch(Exception e) {
            e.printStackTrace();
            Logger.e(e.getMessage());
        }
        return responseData;
    }

Ich möchte fragen, wie ich JSONObject (erstes Code-Snippet) asynchron zurückbekommen kann.

Alle Anfragen werden mit der Volley-Bibliothek verarbeitet.

Vielen Dank für jeden Rat.

  • Sehen Sie, ob Ihre Anforderungen dieser Frage entsprechen oder nicht

    – BNK

    3. September ’15 um 13:44

  • Danke Yopu, aber ich denke nicht, ich würde gerne wissen, wie man mit einigen Codebeispielen umgeht, die meinen Anforderungen entsprechen.

    – redrom

    3. September ’15 um 14:40

  • Eigentlich kann ich immer noch nicht verstehen, was Ihre Asynchronität hier bedeutet? Gemäß Google-Dokumentation, es ist bereits asynchron (… with data fetched asynchronously from the network.)

    – BNK

    3. September ’15 um 14:46


  • Ich denke, dass Async von Volley automatisch bereitgestellt wird. Ich muss also wissen, wie man JSON-Daten in das erste Snippet einfügt.

    – redrom

    3. September ’15 um 15:00

  • Danke, es sieht nach einer guten Lösung aus, aber ich verstehe nicht, was genau bedeutet, die MySingleton-Klasse zu verwenden. Dazu brauche ich ein Beispiel.

    – redrom

    7. September ’15 um 8:25

Android Wie gebe ich asynchrones JSONObject von der Methode mit
BNK

Für deinen Kommentar

Ich denke, dass Async von Volley automatisch bereitgestellt wird. Ich muss also wissen, wie man JSON-Daten in das erste Snippet einfügt

IMO, anstelle Ihres ersten Snippets können Sie Folgendes versuchen (natürlich können Sie ersetzen JSONArray Anfrage von JSONObject Anfrage):

VolleyResponseListener listener = new VolleyResponseListener() {
            @Override
            public void onError(String message) {
                // do something...
            }

            @Override
            public void onResponse(Object response) {
                // do something...
            }
        };

makeJsonArrayRequest(context, Request.Method.POST, url, requestBody, listener);

Körper von makeJsonArrayRequest kann wie folgt sein:

    public void makeJsonArrayRequest(Context context, int method, String url, String requestBody, final VolleyResponseListener listener) {
        JSONObject jsonRequest = null;        
        try {
            ...
            if (requestBody != null) {
                jsonRequest = new JSONObject(requestBody);
            }
            ...
        } catch (JSONException e) {
            e.printStackTrace();
        }

        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(method, url, jsonRequest, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray jsonArray) {
                listener.onResponse(jsonArray);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                listener.onError(error.toString());
            }
        });

        // Access the RequestQueue through singleton class.
        MySingleton.getInstance(context).addToRequestQueue(jsonArrayRequest);
    }

VolleyResponseListener Schnittstelle wie folgt:

public interface VolleyResponseListener {
    void onError(String message);

    void onResponse(Object response);
}

.

297700cookie-checkAndroid: Wie gebe ich asynchrones JSONObject von der Methode mit Volley zurück?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy