【发布时间】:2018-09-26 02:06:30
【问题描述】:
我在 Android 上使用 Retrofit。
我定义了一个服务GitHubService。
public interface GithubService {
@GET("users/{user}")
Call<ResponseBody> fetchUserInfo(@Path("user") String user);
}
然后我创建服务。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.github.com")
.build();
GithubService service = retrofit.create(GithubService.class);
Call<ResponseBody> call = service.fetchUserInfo("coxier");
call.enqueue(...);
如您所见,我使用上面的代码来获取 github 的用户信息。上面的代码对我来说效果很好。现在我想知道 Retofit 是如何工作的,所以我阅读了源代码。下面的代码是Retrofit#create。看完还是不知道它的神奇之处,于是决定调试Retroft。
public <T> T create(final Class<T> service) {
...
return (T) Proxy.newProxyInstance(...,
new InvocationHandler() {
...
@Override public Object invoke(..)
throws Throwable {
if (method.getDeclaringClass() == Object.class) {
return method.invoke(this, args);
}
...
return loadServiceMethod(method).invoke(args != null ? args : emptyArgs);
}
});
}
我在if(method.getDeclaringClass() == Object.class) 行进行调试,但是它崩溃了。我不知道它为什么会崩溃。
编辑
我测试了几个设备。
- Nexus 6P Android 8.0:调试时崩溃
- 小米 6 Android 8.1:调试时崩溃
- OnePlus 3 Android 8.0:调试时崩溃
- Nexus 6P Android 7.0:调试时运行良好
- Oppo Android 6.0:调试时运行良好
- Samsung S4 Android 5.0:调试时运行良好
Android 8.0 以上可能会崩溃。
【问题讨论】:
-
你能提供Logcat吗?
-
@JeelVankhede 没有崩溃日志。