NullPointerException при вызове retrofit.Call<>

Я использую модифицированную версию "2.0.0-бета2" и конвертер-gson той же версии в приложении для Android.

Я строю сервис в onCreate из Fragment:

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(getString(R.string.api_base_url))
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    mService = retrofit.create(MyService.class);

Затем позже на событие пользовательского интерфейса:

call = mService.method(params);
call.enqueue(methodCallback);

Спустя несколько мгновений, onResponse из methodCallback не вызывается, и приложение вылетает со следующей обратной трассировкой:

java.lang.NullPointerException
    at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.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)

Я использую модификацию неправильно или это возможная ошибка?

Спасибо

2 ответа

Решение

Модификация инициализации кажется нормальной, проверьте, не является ли обратный вызов нулевым, когда вы вызываете "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);

с анонимным классом и проверьте, работает ли сервис.

Другие вопросы по тегам