我在我的应用程序中使用这些库:
实现'com.squareup.retrofit2:retrofit:2.4.0'implementation'com.squareup.retrofit2:converter-gson:2.3.0'implementation'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;
}
}
直到今天早上它没有问题,但是从今天早上起它没有用,并且 getMessage 在 onFailure 中返回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 回答
从javadoc进行改造
如果你的特定请求在POSTMAN上没问题,那么它就不可能进行
onFailure()
回调,除非:android客户端未连接到Internet .
基本URL或 endpoints 错误 .
你正在呼唤资源,即 .
List<Ad>
表示 endpoints 无法返回 .您的申请类型(
POST/GET/PUT/..
)错误 .在api客户端中声明的默认超时内,响应不可用 . 代码:
new OkHttpClient.Builder().connectTimeout(100, TimeUnit.SECONDS) //connect timeout
除此之外,我只在我的
onFailure()
回调中执行以下操作,它就像一个魅力: