2017-04-26 79 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

相关问题