2014-11-14 1 views
0

Как разобрать 401 данные ответа для залпа, вот ответ сервера я получаю я haev использовал ответ залп сети, но его не в состоянии получить данные ответа, который находится в формате JSONпразем 401 залп сообщение об ошибке

Status 200 OK 
{ 
    alert: { 
     title: "Unauthorised access to appointment" 
     message: "" 
    }- 
    response: "0" 
} 



new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Log.e(TAG, "Req Failed!"); 
     mProgressDialog.dismiss(); 
     NetworkResponse localNetworkResponse = error.networkResponse; 
     if (localNetworkResponse != null) { 
      if (!WebAPIEngine.checkStatusCodeVolley(localNetworkResponse.statusCode)) { 
       AlertDialogUtil.displayErrorAlert(error.toString(), mContext); 
      } 
     } else { 
      Log.e(TAG, error.toString()); 
      try { 
       JSONObject jsonObject = new JSONObject(error.getMessage()); 
        if (WebAPIEngine.processErrorAlertResp(jsonObject)) { 
         AlertDialogUtil.displayErrorAlert(WebAPIEngine.getErrorMessage(), mContext); 
        } else { 
         AlertDialogUtil.displayErrorAlert(error.toString(), mContext); 
        } 
       } 
      catch (Exception e) { e.printStackTrace(); } 
     } 
    } 
}); 
+0

вы пробовали разбор объект 'JSONObject = новый JSONObject (новый String (error.networkResponse.data))'? –

+0

error.networkResponse am получает нуль – kondal

+0

сначала проверьте, если 'error' является экземпляром' NoConnectionError' или любым другим типом ошибки, который не содержит networkResponse. В другом случае необходимо установить networkResponse и также содержать ожидаемые данные. –

ответ

1

Вы можете использовать следующий код, чтобы получить ответ

String responseString=""; 
if (networkResponse != null) { 
    try { 
     Log.v(TAG , ".getResponseError code :"+networkResponse.statusCode); 
     responseString = new String(networkResponse.data, HttpHeaderParser.parseCharset(networkResponse.headers)); 
     Log.v(TAG, ".getResponseError body :" + responseString); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
} 

Кроме того, остерегайтесь ошибок 401 ненадежны обращаться в Volley: The SO answer объясняет это прекрасно.

0

ОБНОВЛЕНИЕ июля 2016

Как упоминалось, 401 ошибок являются ненадежными для обработки в Volley, но в последнее время я нашел обходной путь не упоминается в The S.O answer, и я думал, что это может быть полезно, если предлагаемые решения не костюм ваш случай.

1) Создать базовый запрос вытянутую любой запрос залпа (StringRequest, JSONObjectRequest, и т.д ...) и переопределить parseNetworkError() функция

/* Custom volley request. I chose to extend JsonObjectRequest 
* feel free to extend any other volley class 
*/ 
public class CundinasRequest extends JsonObjectRequest{ 
... 
    @Override 
    //This will make the volley error message to contain your server's error message 
    protected VolleyError parseNetworkError(VolleyError volleyError) { 
     if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){ 
      volleyError = new VolleyError(new String(volleyError.networkResponse.data)); 
     } 
     return volleyError; 
    } 
... 
} 

2) В вашем onErrorResponse () Реализация вы просто должны проанализировать ошибку своего сервера. Вот пример:

//Volley request is made somewhere in this activity 
public class MainActivity extends Activity { 
    private final String AUTH_ERROR_IDENTIFIER = "invalid_token"; 
... 
    public isAuthorizationError(VolleyError error){ 
    return error.getMessage().contains(AUTH_ERROR_IDENTIFIER); 
    } 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     if(isAuthorizationError(error) 
     Log.e(TAG, "Please log in again"); 
    } 

}  

Я нашел обходной путь полезным, поскольку я не мог изменить статус возврата сервера и ошибка авторизации всегда была одинаковой. Чтобы дать Вам идею, это было что-то вроде этого:

{ 
    "error": "invalid_token", 
    "error_description": "Invalid access token: AN INVALID TOKEN" 
} 
Смежные вопросы