2017-10-18 50 views
1

我在我的应用程序中使用Retrofit从他的服务器下载一些JSON。但有些时候,当我从服务器请求重复的数据时,它会返回空主体响应代码208,但在200我有一个非空的响应正文。 在null身体改造去onFailure方法。我的问题在这里! 我想知道请求失败的原因(这是因为208(在我的情况下)或其他事情)。如何在OnFailure方法中获得响应代码?如何使用改造创建新回调

我试图实现这样我自己的回调方法:

public class DefaultCallback<T> implements Callback<T> { 

    private static final String TAG = "LOGO_SendReport"; 
    private Callback<T> callback; 

    public DefaultCallback(Callback<T> callback) { 
    this.callback = callback; 
    } 

    @Override 
    public void onResponse(Call<T> call, Response<T> response) { 
    if (response.body() == null) { 

     callback.onFailure(call, new NullPointerException("Empty response")); 
     Log.e(TAG, "Response code is: " + response.code()); 

    } else { 
     callback.onResponse(call, response); 
    } 
    } 

    @Override 
    public void onFailure(Call<T> call, Throwable t) { 
    Log.e(TAG, t.toString()); 
    callback.onFailure(call, t); 
    } 
} 

这是我的电话:

@POST("office/report") 
    Call<ResponseSendReport> sendReport(@Body SendReport pendingList); 

这是我的最后一个方法:

final APIService service = ServiceGenerator.createService(APIService.class, App.Auth); 

      Call<ResponseSendReport> call = service.sendReport(sendReport); 

      call.enqueue(new Callback<ResponseSendReport>() { 
       @Override 
       public void onResponse(Call<ResponseSendReport> call, Response<ResponseSendReport> response) { 

       Log.i("LOGO_SendReport", "code is: " + response.code()); 


       if (response.code() == 200) { 


       } 

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

       /*When Response code is 208 Goes here and I want to get 
       response code 
       if it is 208 to handle it! */ 
       } 
      }); 

谢谢你你的帮助。

回答

0

您可以创建抽象类和处理案例。

public abstract class DefaultCallback<T> implements Callback<T> { 

    @SuppressWarnings({"ConstantConditions", "unchecked"}) 
    @Override public void onResponse(@NonNull Call<T> call, Response<T> response) { 
     if (response.isSuccessful()) { 
      onSuccess(response.body(), response.code()); 
     } else { 
      onError(response.errorBody(), response.code()); 
     } 
    } 

    @Override public void onFailure(@NonNull Call<T> call, @NonNull Throwable throwable) { 
     onError(null, -1); 
    } 

    public abstract void onSuccess(@NonNull final T response, int code); 

    public abstract void onError(@Nullable ResponseBody body, int code); 
} 
0

可以使用进去onResponse方法响应代码response.code()

@Override 
public void onResponse(Call<ResponseSendReport> call, Response<ResponseSendReport> response) { 
    if (response.isSuccessful()) { 
     if (response.code() == 208) { 
      //do sth 
     } else { 
      //do sth 
     } 
    } else { 
     //do sth 
    } 
} 
0

1.You可以简单地修改您的通话:

@POST("office/report") 
Call<Response<ResponseSendReport>> sendReport(@Body SendReport pendingList); 

2,本是你的最后一个方法:

@Override 
public void onFailure(Call<Response<ResponseSendReport>> response, Throwable t) { 

    response.code() // /** HTTP status code. */ 
    response.body() //your object 
      } 
     });