改造Java.lang.IllegalArgumentException host == null

时间:2016-07-01 07:09:15

标签: java android retrofit okhttp3

我正在使用Retrofit对Web服务做一些请求,但直到最近一切都出错了,我开始得到标题中提到的异常。我有一个基类,基本上是这样的:

protected BaseService(int version) {
    OkHttpClient.Builder builder = new OkHttpClient.Builder();

    if (cookieJar == null) {
        CookieManager cookieManager = new CookieManager();
        cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
        cookieJar = new JavaNetCookieJar(cookieManager);
    }

    builder.cookieJar(cookieJar);

    if (BuildConfig.IS_DEBUG) {
        BASE_URL = "http://nasko.dev.trainingassetsgateway.com";

        builder.interceptors().add(new Interceptor() {
            @Override
            public Response intercept(Interceptor.Chain chain) throws IOException {
                Request newRequest = chain
                        .request()
                        .newBuilder()
                        .addHeader("Authorization", "Basic REMOVED")
                        .build();

                return chain.proceed(newRequest);
            }
        });

    } else {
        BASE_URL = "https://trainingassetsgateway.com";
    }

    API_URL = BASE_URL + "/mapi/" + version + "/";

    client = new Retrofit
            .Builder()
            .baseUrl(API_URL)
            .client(okHttpClient = builder.build())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
}

问题始于拦截器链。我已经将它跟踪到HttpEngine.createAddress方法,其中正在创建一个新的Address实例。

createAddress from debugger

正如所见,URL的主机部分在那里,但是稍后在堆栈中的下一次调用中,“uriHost”为空,而它应该与“Watches”窗口中看到的相同。 / p>

uriHost is null from debugger

从那里它到达主机为空并抛出异常的点。我做错了什么或者错过了什么?

1 个答案:

答案 0 :(得分:0)

如果有人进入此状态,只需删除手机上的应用即可。我希望我能早点做到这一点......