Из кода, который я вижу, нет проблем, почему бы не попробовать использовать какой-либо RxJava2CallAdapterFactory из rxjava2?Я думаю, что когда он получил значение json и пытается сохранить его, он застрял в .addCallAdapterFactory (RxJavaCallAdapterFactory.create ()), поэтому он возвращает ошибку
Я могу привести пример моей реализациииспользуя Retrofit, чтобы вы могли использовать его в качестве ссылки
в моем Gradle:
implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation "com.jakewharton.rxbinding2:rxbinding:2.1.1"
implementation "com.github.akarnokd:rxjava2-extensions:0.18.9"
implementation "com.squareup.retrofit2:retrofit:2.4.0"
implementation "com.squareup.retrofit2:converter-gson:2.4.0"
implementation "com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0"
implementation "com.squareup.okhttp3:okhttp:3.10.0"
implementation "com.squareup.okhttp3:okhttp-urlconnection:3.10.0"
implementation "com.squareup.okhttp3:logging-interceptor:3.4.1"
, и это мой ApiClient:
public class ApiClient {
private static Retrofit retrofit = null;
private static OkHttpClient okHttpClient;
public static Retrofit getClient() {
if (okHttpClient == null)
initOkHttp();
if (retrofit == null) {
final Gson gson = new GsonBuilder()
.registerTypeAdapter(
Travel.class,
new JsonTravelSerializer())
.create();
retrofit = new Retrofit.Builder()
.baseUrl(Const.BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
}
return retrofit;
}
private static void initOkHttp() {
int REQUEST_TIMEOUT = 60;
OkHttpClient.Builder httpClient = new OkHttpClient().newBuilder()
.connectTimeout(REQUEST_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(REQUEST_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(REQUEST_TIMEOUT, TimeUnit.SECONDS);
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
httpClient.addInterceptor(interceptor);
httpClient.addInterceptor(chain -> {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.addHeader("Accept", "application/json")
.addHeader("Request-Type", "Android")
.addHeader("Content-Type", "application/json");
Request request = requestBuilder.build();
return chain.proceed(request);
});
okHttpClient = httpClient.build();
}}
в классе, который вам нужно вызвать
apiservice = ApiClient.getClient().create(ApiService.class);
.....
disposable.add(apiService
.getJson()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<JsonObject>() {
@Override
public void onSuccess(JsonObject jsonObject) {
Gson gson = new Gson();
String jsonOutput = jsonObject.get("data").toString();
Type listType = new TypeToken<List<TravelData>>() {
}.getType();
List<TravelData> travelData = gson.fromJson(jsonOutput, listType);
travelList.clear();
travelList.addAll(travelData);
adapter = new MainViewAdapter(getSupportFragmentManager());
adapter.addAll(travelList);
viewPager.setAdapter(adapter);
}
@Override
public void onError(Throwable e) {
}
})
);