2016-09-18 8 views
0

발리 응답의 URL을 리디렉션해야합니다. 내 경우에는 리다이렉트 된 마지막 URL이 404이지만, 어떻게하면 VolleyError에서 URL을 얻을 수 있는지 알 수 없습니다.Android Volley get redirect url

+0

볼 http://stackoverflow.com/questions/32630993/android-volleyerror-retrieve-requested-url volleyerror 객체 –

+0

가있다 "위치"있는지 확인하기 위해 웹 서비스의 응답 헤더를 확인 값 여부 ? 우편 배달부와 같은 도구로 시도해 볼 수 있습니까? – BNK

답변

0

그 후 다시 클라이언트에 응답을 보낼 때 일부 요청이 당신이 getHeaders()를 오버라이드 (override)하는 수 않는 당신이 VolleyError에서 번갈아마다

 NetworkResponse response = volleyError.networkResponse; 

     if (response != null && response.data != null) { 
      Map<String, String> headers = response.headers; 
      String URL = headers.get("my_url_key"); 
     } 

또는 헤더를 얻을 수있는 헤더에 URL을 추가 할 서버를 디자인 예

 JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, 
        createURL(), null, success, errorListener) { 
       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 
        Map<String, String> header = new HashMap<>(); 
        header.put("my_url_key", "http://mywebsite.com"); 
        return header; 
       } 
     }; 

검색은 위의 코드와 동일하지만 더 이상 서버에서 아무것도 변경할 필요가 없기 때문에 훨씬 편리합니다. 당신은 당신이 다음을 수행 할 수 있습니다 응답 코드를 기반으로 리디렉션을 수행하려면

는 :

NetworkResponse response = volleyError.networkResponse; 

if (response != null && response.data != null) { 
     if(response.statusCode == 404){ 
      // Do something here 
     } 
} 

이 있습니다 그냥 서버가 바이너리 응답과 함께 리디렉션 URL을 포함 할 수 있기를 바랍니다.

Ex.

NetworkResponse response = volleyError.networkResponse; 

    if (response != null && response.data != null) { 
      JSONObject o = new JSONObject(new String(response.data)); 
      // get the info here 
    } 
+0

서버를 변경할 수 없습니다 –

+0

@konopko 제 대답을 업데이트했습니다. – Enzokie

+0

나는이 접근 방식을 좋아하지만, 어떻게 URL을 리디렉션하여 헤더에 넣을 수 있습니까? –