我在应用程序中使用这些库:
实现'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());
}
出什么问题了?
答案 0 :(得分:0)
从javadoc开始进行改装
onFailure(Call<T> call, Throwable t)
在与服务器通信时发生网络异常,或者在创建请求或处理响应时发生意外异常时调用。
如果您的特定请求在POSTMAN上还可以,那么除非在以下情况,否则它不可能进行onFailure()
回调:
List<Ad>
端点无法返回。POST/GET/PUT/..
)错误。new OkHttpClient.Builder().connectTimeout(100, TimeUnit.SECONDS) //connect timeout
除此之外,我仅在onFailure()
回调中执行以下操作,它的工作方式就像一个超级按钮:
Log.e(TAG, t.getLocalizedMessage());
Log.e(TAG, t.getMessage());
t.printStackTrace();