2017-04-26 15 views
0
Call<LoginResponse> call = apiService.register(email, mob); 
call.enqueue(new Callback<LoginResponse>() { 
       @Override 
       public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { 

        if(response.code()==200){ 
         Gson gson = new Gson(); 
         LoginResponse phoneLoginResponse = response.body(); 
         String sPhoneLoginRes = gson.toJson(phoneLoginResponse, LoginResponse.class); 
         Log.d(TAG, "JSON RESPONSE IS" + sPhoneLoginRes); 
        }else if(response.code()==401){ 

    //here i want to show below Response 
         Gson gson = new Gson(); 
         ErrorResponse errorResponse = response.body(); 
         String sPhoneLoginRes = gson.toJson(errorResponse.toString(), LoginResponse.class); 
         Log.d(TAG, "JSON RESPONSE IS" + sPhoneLoginRes); 
        }else if(response.code()==400){ 
         Toast.makeText(SignUpActivity.this, "Somethign went Wrong", Toast.LENGTH_SHORT).show(); 
        } 



       } 

       @Override 
       public void onFailure(Call<LoginResponse> call, Throwable t) { 

       } 
      }); 

這是我的401響應,當我嘗試提交表單時,我需要獲取下面的對象,所以我使用ErrorResponse Class.But響應我得到的是Null.Please幫助我。如何在Retrofit2的onResponse中映射另一個可序列化的類。

{ 
    "message": "string", 
    "errors": [ 
    "string" 
    ] 
} 

我使用Retrofit2.0

回答

0

Response.body()回報null如果Response.isSuccessful()是假的。對於任何非2xx響應代碼將是錯誤的。

您將需要使用Response.errorBody()來檢索原始響應並解析自己。

+0

你可以提倡這些東西或程序化的方法將不勝感激!謝謝 –

+0

爲了得到原始的JSON,使用'response.errorBody()。string()'。從那裏完全取決於你。 – Kiskae

+0

我應該把它映射到任何類嗎?像LoginResponse res = response.errorBody()。toString()。 –

1

我找到了解決方案。

     //request not successful (like 400,401,403 etc) 
         //Handle errors 
    Converter<ResponseBody, ErrorResponse> converter = ApiClient.getRetrofit().responseBodyConverter(ErrorResponse.class, new Annotation[0]); 
        try { 
          ErrorResponse errors = converter.convert(response.errorBody()); 
          dialogUtil.showOkDialog(errors.getMessage().toString()); 
         } catch (Exception e) { 
          dialogUtil.showOkDialog(e.getMessage().toString()); 
         } 
+0

處理4XX錯誤的最佳解決方案!謝謝 – Sairam

相關問題