在onFailure中改装getMessage返回null

时间:2018-07-19 07:11:44

标签: android api retrofit2

我在应用程序中使用这些库:

  

实现'com.squareup.retrofit2:retrofit:2.4.0'

     

实现'com.squareup.retrofit2:converter-gson:2.3.0'

     

实现'com.squareup.okhttp3:okhttp:3.10.0'

这是我的 RetrofitClientInstance 类实现:

public class RetrofitClientInstance {

    private static Retrofit retrofit;
    private static final String BASE_URL = "my basic url";

    public static Retrofit getRetrofitInstance() {
        OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .build();
        if (retrofit == null) {
            retrofit = new retrofit2.Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(okHttpClient)
                    .build();
        }
        return retrofit;
    }
}

直到今天早上没问题,但从今天早上开始不起作用, onFailure 中的 getMessage 返回null,而t.toString()返回java.net.SocketTimeoutException 。 (邮递员还是可以的。)

@Override
public void onFailure(@NonNull Call<List<Ad>> call, @NonNull Throwable t) {

    call.clone().enqueue(this);
    Log.e("error in SplashScreen", "!!" + t.getMessage());
}

出什么问题了?

1 个答案:

答案 0 :(得分:0)

javadoc开始进行改装

  

onFailure(Call<T> call, Throwable t)

     

在与服务器通信时发生网络异常,或者在创建请求或处理响应时发生意外异常时调用。

如果您的特定请求在POSTMAN上还可以,那么除非在以下情况,否则它不可能进行onFailure()回调:

  1. Android客户端未连接到互联网。
  2. 基本URL或端点错误。
  3. 您正在请求资源,即。 List<Ad>端点无法返回。
  4. 您的请求类型(POST/GET/PUT/..)错误。
  5. 该响应在api客户端中声明的默认超时时间内不可用。代码:new OkHttpClient.Builder().connectTimeout(100, TimeUnit.SECONDS) //connect timeout

除此之外,我仅在onFailure()回调中执行以下操作,它的工作方式就像一个超级按钮:

Log.e(TAG, t.getLocalizedMessage());
Log.e(TAG, t.getMessage());
t.printStackTrace();