【发布时间】:2016-07-01 07:09:14
【问题描述】:
我正在使用 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();
}
问题始于拦截器链。我已将其追溯到正在创建 Address 的新实例的 HttpEngine.createAddress 方法。
正如所见 URL 的主机部分在那里,但稍后在堆栈中的下一次调用中,“uriHost”为空,而它应该与在“Watches”窗口中看到的相同。
从那里到达主机为空并引发异常的点。我做错了什么还是错过了什么?
【问题讨论】:
-
这两个网址都会发生吗??
-
是的,两者都发生了。它不是来自cookie jar,也不是来自拦截器
-
使用 BASE_URL 作为基本 url 而不是 API_URL
-
试过了,并将 URL 的其余部分移动到服务,但仍然不起作用。
标签: java android retrofit okhttp3