Я новичок в rxJava и Retrofit2, но я не могу показаться, чтобы выяснить, как достичь желаемой ситуации:Сохранить Retrofit2 API вызова кэшировать с RxJava
- Получить список мест (Retrofit2 интерфейса API), это будет дать JSON массив с местом объекты
- Put JSON массив в HashMap (где справиться с этим?)
- Put HashMap в Singleton, так что это кэшируются и может быть вызвана по всему приложению с GetInstance
Массив JSON содержит сотни «мест», которые я хочу кэшировать (Singleton), поэтому мне не нужно делать вызовы для каждого изменения в приложении.
интерфейс (MyAPI)
/**
* RxJava testing endpoint
* @return Observable list of Places
* count = 0 means everything
*/
@GET("place/search?count=0")
rx.Observable<List<Place>> loadPlacesRx();
Singleton
...
private static PlaceSingleton ourInstance = new PlaceSingleton();
private static RxJavaCallAdapterFactory rxAdapter =
RxJavaCallAdapterFactory.createWithScheduler(Schedulers.io());
private static Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(JacksonConverterFactory.create())
.addCallAdapterFactory(rxAdapter)
.baseUrl(myAPI.BASE_URL)
.build();
// Prepare call in Retrofit2
private static MyAPI myAPI = retrofit.create(MyAPI.class);
/**
* This method should handle the steps mentioned above
*/
public void getAllPlaces() {
poiList = myAPI.loadPlacesRx()
.map(Place -> ...
...
Функция 'map' добавляет каждое место в ваш' PlaceSingleton', содержащий хэш-карту. Вместо оператора 'map' вы можете использовать' doOnNext' –