Это действительно странная проблема, которая у меня есть.Наблюдаемый RX-Retrofit получает данные только в первый раз
Я использую RX JAVA Наблюдаемый с модификацией для получения данных с сервера, эти данные должны меняться каждый раз, но, похоже, они загружают данные только в первый раз, а остальные - время повторного получения одинаковых данных ,
Кроме того, INTERNET CONNECTION по-прежнему получает данные (по-видимому, из локальных) и все еще идет в onNext, а не onError, как должно быть.
Это мой наблюдаемое:
Token token = new Token(AppConfig.TOKEN_NEWS);
Observable<ArrayList<NewsV0>> newsList = mZappAppApis.getNews(token.getToken());
newsList
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ArrayList<NewsV0>>() {
@Override
public void onCompleted() {
Logger.i("Retriving user data onCompleted");
onLoadCompleted(false);
}
@Override
public void onError(Throwable e) {
Logger.e("Error retriving user data [" + e.getMessage() + "]");
onLoadCompleted(true);
}
@Override
public void onNext(ArrayList<NewsV0> newsV0s) {
Logger.i("Get news from api size ["+newsV0s.size()+"]");
//Every time go here, with internet and without internet, loading the same data
}
});
Моего Модифицированная апи:
@GET("/News")
Observable<ArrayList<NewsV0>> getNews(
@Header("Authorization") String authorization
);
Я надеюсь, что кто-то может мне помочь!
Спасибо заранее!
EDIT:
Это путь я предоставления RetrofitAdapter
@Provides
ZappAppApis provideContentApi(OkHttpClient okHttpClient) {
String apiUrl;
apiUrl = AppConfig.protocolHttp + AppConfig.ZAPPAPP_API_BASE_URL;
Logger.d("Base url API [ " + apiUrl + " ]");
Retrofit restAdapter = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(apiUrl)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
return restAdapter.create(ZappAppApis.class);
}
И это путь, я предоставление OkHttpClient:
@Provides
OkHttpClient okHttpClient() {
final OkHttpClient client = new OkHttpClient();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
if (BuildConfig.DEBUG)
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
else
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.NONE);
// set disk cache
client.setCache(new Cache(context.getCacheDir(), DISK_CACHE_SIZE));
List<Interceptor> interceptors = new ArrayList<>();
interceptors.add(loggingInterceptor);
interceptors.add(new LoggingInterceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.header("Key", AppConfig.ZAPPAPP_CLIENT_KEY)
.header("Cache-Control", "public, max-age=60")
.method(original.method(), original.body())
.build();
return chain.proceed(request);
}
});
client.networkInterceptors().addAll(interceptors);
return client;
}
Вы выполняете кеширование HTTP? Отправьте код, который вы используете для создания RestAdapter, и создайте экземпляр вашего клиента API. – Egor
Да, есть кеширование, но я не думаю, что проблема в том, что .. спасибо за помощь (отредактировано) – dvdciri
client.setCache (новый Cache (context.getCacheDir(), DISK_CACHE_SIZE)); Вы кешируете свои результаты. – skywall