首页 文章

onFailure中的retrofit getMessage返回null

提问于
浏览
0

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

实现'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;
    }
}

直到今天早上它没有问题,但是从今天早上起它没有用,并且 getMessageonFailure 中返回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

    javadoc进行改造

    onFailure(Call <T> call,Throwable t)当与服务器通信时发生网络异常或者在创建请求或处理响应时发生意外异常时调用 .

    如果你的特定请求在POSTMAN上没问题,那么它就不可能进行 onFailure() 回调,除非:

    • android客户端未连接到Internet .

    • 基本URL或 endpoints 错误 .

    • 你正在呼唤资源,即 . List<Ad> 表示 endpoints 无法返回 .

    • 您的申请类型( POST/GET/PUT/.. )错误 .

    • 在api客户端中声明的默认超时内,响应不可用 . 代码: new OkHttpClient.Builder().connectTimeout(100, TimeUnit.SECONDS) //connect timeout

    除此之外,我只在我的 onFailure() 回调中执行以下操作,它就像一个魅力:

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

相关问题