2016-04-19 3 views
2

Ich entwickle gerade eine Journey Planner App, die TFLs Unified API verwendet, für Benutzer mit unterschiedlicher Zugänglichkeit für London.TFL API: E/Volley: [73683] BasicNetwork.performRequest: Unerwarteter Antwortcode 300

Bis jetzt funktionieren JSONObject/Array-Anfragen, die verwenden, zum Beispiel https://api.tfl.gov.uk/Journey/JourneyResults/1000266/to/1000013, anstelle von Strings für die Parameter to und from, und ich kann JSON von ihnen bekommen. Aber jeder Versuch, Wörter für Argumente zu verwenden, führt zu einem Fehler im Titel. Meine Absicht war es, den Satz von Disambiguierungsoptionen zurückzugeben und dem Benutzer zu erlauben, aus einer Liste auszuwählen, zum Beispiel Westminster (London), Westminster, und seine icsCode zu parsen, um die Reisen in Bezug auf diesen Ort zu erhalten.

In der TFL-Dokumentation wird angegeben, dass die API-Anforderung entweder ein Objekt zur Unterstützung der Disambiguierung oder ein Objekt mit den angeforderten Reiseergebnissen zurückgibt.

Unten ist ein Link zu welchen Anfragen mit Disambiguation.Result aussehen.

https://api.tfl.gov.uk/Journey/JourneyResults/westminster/to/bank

Unten ist mein Code für die JsonRequest und wo ich den Fehler für DisambiguationResults erhalten:

private void sendJsonRequest() { 
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, getRequestUrl(10), null, 
new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         listJourneys=parseJSONResponse(response); 
         adapterResults.setJourneyList(listJourneys); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       System.out.println(error); 
      } 
     }); 
     requestQueue.add(request); 
    } 

ich diesen Fehler:

mir zeigen konnte

E/Volley: [73683] BasicNetwork.performRequest: Unexpected response code 300 for https://api.tfl.gov.uk/Journey/JourneyResults/westminster/to/bank ?

Wenn jemand in die richtige Richtung würde es sehr geschätzt werden.

+0

das bedeutet der Server hat eine 'HTTP.300' Antwort zurückgegeben https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection – thepoosh

Antwort

0

Ihr Server URL Antworten Code wie der folgende Screenshot (ich benutze Postman)

enter image description here

Also mit Volley, Sie parseNetworkError verwenden können, erhalten dann die Antwort Körper innerhalb onErrorResponse wie in meiner Probe Code unten

... 
String url = "https://api.tfl.gov.uk/Journey/JourneyResults/westminster/to/bank/"; 
RequestQueue queue = Volley.newRequestQueue(this); 
JsonObjectRequest request = new JsonObjectRequest(url, new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     Log.i("onResponse", response.toString()); 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Log.i("onErrorResponse", error.toString()); 
    } 
}){ 
    @Override 
    protected VolleyError parseNetworkError(VolleyError volleyError) { 
     if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){ 
      VolleyError error = new VolleyError(new String(volleyError.networkResponse.data)); 
      volleyError = error; 
     } 

     return volleyError; 
    } 
}; 
queue.add(request); 
... 

Logcat haben die JSONObject (Antworttext) wie diese I/onErrorResponse: com.android.volley.VolleyError: {"$type":"Tfl.Api.Presentation.Entities.JourneyPlanner.DisambiguationResult,....

Hoffe es hilft!

+1

Vielen Dank, das ist genau das, was ich gesucht habe! Anfangs war ich von der Logcat-Nachricht verwirrt, aber wie sich herausstellte, war der Antworttext einfach viel länger als das, was im Android Monitor-Fenster angezeigt werden könnte. – Storblor

Verwandte Themen