これは私が抱えている本当に奇妙な問題です。
サーバーからデータを取得するためにレトロフィットを備えたRX JAVA Observableを使用しています。これらの種類のデータは毎回変更する必要がありますが、最初にのみデータをロードし、残りは同じデータを再取得するようです。
また、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
}
});
私のレトロフィットAPI:
@GET("/News")
Observable<ArrayList<NewsV0>> getNews(
@Header("Authorization") String authorization
);
誰かが私を助けてくれることを願っています!
前もって感謝します!!
編集:
これは、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;
}