Retrofit 2 возвращает null в производстве


Я пытаюсь исправить проблему, когда Retrofit 2 возвращает null в ответ. Интересно, что в эмуляторе все работает нормально, данные принимаются и отображаются,но когда я строю APK, то же самое происходит с NullPointerException. Я прокомментировал строку, где это происходит.

Мое телосложение.зависимости gradle:

compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'io.reactivex.rxjava2:rxjava:2.1.3'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'

Инициализация Модернизации:

retrofit = new Retrofit.Builder()
        .baseUrl(<url>)
        .addConverterFactory(GsonConverterFactory.create())
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .build();

Интерфейс:

@GET(<url>)
Flowable<DataResponse> getDataFromApi(@Query("offset") int offset, @Query("limit") int limit);

Вызов API:

retrofit
  .getDataFromApi(0, 10)
  .subscribeOn(Schedulers.io())
  .observeOn(AndroidSchedulers.mainThread())
  .subscribe(new Subscriber<DataResponse>() {
        @Override
        public void onSubscribe(Subscription s) {
            s.request(Long.MAX_VALUE);
        }

        @Override
        public void onNext(DataResponse dataResponse) {
          // HERE I GET NULL IN PRODUCTION   
        }

DataResponse POJO:

public class ServicesResponse {
  private List<Item> items;

  public List<Item> getItems() {
    return items;
  }
}

Прогуард. Я перепробовал несколько вещей, но все еще безуспешно. В настоящее время это выглядит следующим образом:

-dontwarn retrofit2.**
-keep class javax.annotation.Nullable
-keep interface javax.annotation.Nullable
-keep class retrofit2.** { *; }
-keep class com.squareup.okhttp3.** { *; }
-keep interface com.squareup.okhttp3.** { *; }
-keepattributes Signature
-keepattributes Exceptions
-keepclasseswithmembers class * {
  @retrofit2.http.* <methods>;
}
-keepclasseswithmembers interface * {
  @retrofit2.http.* <methods>;
}

Спасибо за помощь:)

1 2

1 ответ:

Я всегда сохраняю классы моделей, используемые Retrofit, от запутывания. В противном случае AFAIK Gson не может сериализовать / десериализовать модель:

-keep public class your.package.to.models.** {*;}