2016-03-24 10 views
1

Ich verwende volley, um eine JSONObject an meinen Server zu senden und dann eine Antwort zurück zu erhalten. Wenn ich meinen Code im Debug-Modus ausführe, kann ich parseNetworkReponse() von JsonObjectRequest aufrufen und ich kann sehen, dass die Bibliothek die Netzwerkantwort erfolgreich parsen konnte, ohne irgendwelche Fehler zu werfen. Jedoch werden deliverResponse() und anschließend meine onResponse Listener nicht aufgerufen. Ich verwende die JsonObjectRequest Klasse, um JsonObjects zu senden und zu empfangen. Hier ist ein Teil meiner Code:Volley Listeners nicht

Hauptanwendung:

 JSONObject jso = new JSONObject(); 
     jso.put("mac", "XX"); 

     VolleyRequest.post("http://something", jso, applicationCntxt, new IResponseHandler() { 
      @Override 
      public void onResponse(JSONObject response) { 
      } 

      @Override 
      public void onError(VolleyError error) { 

      } 
     }); 

VolleyRequest.post Methode:

public static void post(String url, JSONObject payload, Context context,  final IResponseHandler rqHandler) 
    { 
    Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>() { 
     public void onResponse(JSONObject response) { 
      //stuff 
     } 
    }; 

    Response.ErrorListener errorListener = new Response.ErrorListener() { 
     public void onErrorResponse(VolleyError error) { 
      //stuff 
     } 
    }; 

    JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, url, payload, listener, errorListener); 
    jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(10000, 0, 1f)); 

    VolleyRequestQueue.getInstance(context).addToRequestQueue(jsObjRequest); 

} 

Wer weiß, was das verursacht auf Antwort Zuhörer nicht genannt werden? Ich weiß, dass Volley meine Postanforderung sendet und die Antwort korrekt analysiert. Ich kann das von der debugger sehen und mein Server wirft keine Fehler auf. Es tut nichts nach dem Parsen der Netzwerkantwort

Antwort

0

Sprechen Sie über die Listener in Main Application? Sie rufen sie nie in Ihrer Post-Methode an.

public static void post(String url, JSONObject payload, Context context,  final IResponseHandler rqHandler) 
{ 
Response.Listener<JSONObject> listener = new Response.Listener<JSONObject>() { 
    public void onResponse(JSONObject response) { 
     rqHandler.onResponse(response) ;  
     //stuff 
    } 
}; 

Response.ErrorListener errorListener = new Response.ErrorListener() { 
    public void onErrorResponse(VolleyError error) { 
     rqHandler.onError(error) ; 
     //stuff 
    } 
}; 

JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST, url, payload, listener, errorListener); 
jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(10000, 0, 1f)); 

VolleyRequestQueue.getInstance(context).addToRequestQueue(jsObjRequest); 

} 
+0

Hoppla, das habe ich eigentlich. Ich habe nur oben auf c/p vergessen. Aber in jedem Fall habe ich innerhalb Breakpoints eingerichtet öffentliche void onResponse (JSONObject Antwort) { rqHandler.onResponse (Antwort); // stuff } Und sie werden nie ausgelöst, was mich denken lässt, dass der Listener nicht aufgerufen wird. – KPERI