In meiner Anwendung muss ich mehrere Volley-Anfrage in einer Sequenz senden. Ich habe einen gemeinsamen Listener für den Umgang mit der Volley-Antwort erstellt.So senden Sie mehrere Volley-Anfragen in einer Sequenz und behandeln sie in einem einzigen Listener
public interface RequestCallBack {
void onSuccess(JSONObject jsonObject, String tag)
void OnError(String message);
}
Und registriert diesen Callback-Methode:
public void setOnResponseListener (RequestCallBack onResponseListener) {
this.onResponseListener = onResponseListener;
}
ich eine gemeinsame Methode erstellt haben, in dem Volley Anfrage behandeln.
public void getResponse(String tag, String url) {
JsonObjectRequest jsonObjectRequest;
try {
jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
url,null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
mStatusCode = response.optInt("status_code");
mBody = response.optJSONObject("body");
if (mStatusCode != 0 && mStatusCode == 201) {
onResponseListener.onSuccess(mBody, (String) jsonObjectRequest.getTag());
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
onResponseListener.OnError(displayVolleyError(error));
}
}) {
@Override
protected VolleyError parseNetworkError(VolleyError volleyError) {
if (volleyError.networkResponse != null && volleyError.networkResponse.data != null) {
volleyError = new VolleyError(new String(volleyError.networkResponse.data));
}
return volleyError;
}
};
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
REQUEST_TIMEOUT_MS,
NO_OF_RETRY_ATTEMPTS,
BACK_OF_MULTIPLIER));
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjectRequest, tag);
} catch (Exception e) {
e.printStackTrace();
}
}
Ich habe diese Methode aus einer Klasse wie genannt:
classObject.getResponse("request1", firstUrl);
classObject.getResponse("request2", secondUrl);
Und ich habe die RequestCallBack Interface-Methoden overrided. Aber innerhalb der onSuccess Methode jedes Mal das Tag der zweiten Anfrage zurückgegeben wird.
@Override
public void onSuccess(JSONObject jsonObject, String tag) {
Log.d("Class", "tag: "+tag); // Always returns the "request2"
// Will check service response according to tag
// but didn't get the right tag.
}
@Override
public void OnError(String message) {
}
Kann mir jemand hier vorschlagen, wie Sie dieses Problem lösen.
Vielen Dank im Voraus.
hey ich habe auch ein gemeinsames Konzept erstellt Volley für die Verwendung und Senden von Anfragen. Wenn Sie brauchen, kann ich meinen Ansatz mit Singleton-Objektansatz –
posten Ich verwende bereits die Singleton-Klasse für die Erstellung der Anfrage-Warteschlange. –
Können Sie unterscheiden, dass das Ergebnis, das Sie erhalten, von welchem Service stammt? –