Дело в том, что я раньше парсил локальный JSON в AsyncTask. Но я начал изучать RxJava и пытаюсь распарсить огромный JSON файл из assets таким образом:
Observable.just(AssetsUtil.getCountryList(context))
.flatMapIterable(new Function<List<Country>, Iterable<?>>() {
@Override
public Iterable<?> apply(List<Country> countryList) throws Exception {
return countryList;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(item -> mView.onCountryListReceive((Country) item));
где onCountryListReceive((Country) item)):
@Override
public void onCountryListReceive(Country country) {
countries.add(country);
PreferencesUtil.putCountryList(getActivity(), countries);
}
AssetsUtil.getCountryList(context):
public static List<Country> getCountryList(Context context) {
String countryJson = loadJSONFromAsset(context);
List<Country> countryList = new Gson().fromJson(countryJson, new TypeToken<List<Country>>(){}.getType());
cityList = new ArrayList<>();
if (countryList != null) {
for (Country country : countryList){
cityList.addAll(country.getCities());
}
}
return countryList;
}
Я уверен, что делаю не правильно, так как, MainThread зависает при парсинге.
Вопрос: Как реализовать задачи такого рода в RxJava, может есть методы типа doInBackground, блок, внутри которого можно решать тяжелые задачи?
Насколько мне известно, Observable.just() выполнится в том потоке, где вызывается. Т.е. на него subscribeOn() не подействует.
А вот если just заменить на fromCallable, то код внутри будет вызван в том потоке, коий в subscribeOn() указан.
Вместо
AndroidShedulers.mainThread
Попробуйте
new Thread()
Или
Shedulers.newThread()
Если внутри вам нужно работать с UI то делайте так
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
//работайте с UI
}
});
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости