调用 retrofit.Call<> 时出现 NullPointerException
NullPointerException on calling retrofit.Call<>
我在 Android 应用程序中使用相同版本的改造版本“2.0.0-beta2”和 converter-gson。
我在 Fragment
的 onCreate
中构建服务:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(getString(R.string.api_base_url))
.addConverterFactory(GsonConverterFactory.create())
.build();
mService = retrofit.create(MyService.class);
然后在 UI 事件中:
call = mService.method(params);
call.enqueue(methodCallback);
片刻之后,methodCallback
的 onResponse
未被调用,应用程序崩溃并出现以下回溯:
java.lang.NullPointerException
at retrofit.ExecutorCallAdapterFactory$ExecutorCallback.run(ExecutorCallAdapterFactory.java:86)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:177)
at android.app.ActivityThread.main(ActivityThread.java:4947)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
我是不是错误地使用了 retrofit 还是这可能是一个错误?
谢谢
Retrofit 初始化似乎没问题,调用时检查回调是否不为 null "call.enqueue(methodCallback);"
并确保回调的类型正确。如果您的调用定义如下所示:
@GET("/api/rooms")
Call<List<Room>> getRooms(
);
那么调用应该是:
retrofit.create(MyService.class).getRooms().enqueue(new Callback<List<Room>>() {
@Override
public void onResponse(Response<List<Room>> response, Retrofit retrofit) {
}
@Override
public void onFailure(Throwable t) {
}
});
对于初学者,我会替换:
call.enqueue(methodCallback);
使用匿名 class 并检查该服务是否有效。
我在 Android 应用程序中使用相同版本的改造版本“2.0.0-beta2”和 converter-gson。
我在 Fragment
的 onCreate
中构建服务:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(getString(R.string.api_base_url))
.addConverterFactory(GsonConverterFactory.create())
.build();
mService = retrofit.create(MyService.class);
然后在 UI 事件中:
call = mService.method(params);
call.enqueue(methodCallback);
片刻之后,methodCallback
的 onResponse
未被调用,应用程序崩溃并出现以下回溯:
java.lang.NullPointerException
at retrofit.ExecutorCallAdapterFactory$ExecutorCallback.run(ExecutorCallAdapterFactory.java:86)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:177)
at android.app.ActivityThread.main(ActivityThread.java:4947)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
at dalvik.system.NativeStart.main(Native Method)
我是不是错误地使用了 retrofit 还是这可能是一个错误?
谢谢
Retrofit 初始化似乎没问题,调用时检查回调是否不为 null "call.enqueue(methodCallback);"
并确保回调的类型正确。如果您的调用定义如下所示:
@GET("/api/rooms")
Call<List<Room>> getRooms(
);
那么调用应该是:
retrofit.create(MyService.class).getRooms().enqueue(new Callback<List<Room>>() {
@Override
public void onResponse(Response<List<Room>> response, Retrofit retrofit) {
}
@Override
public void onFailure(Throwable t) {
}
});
对于初学者,我会替换:
call.enqueue(methodCallback);
使用匿名 class 并检查该服务是否有效。