Я следую этому примеру: 14.1A: Работа с компонентами архитектуры: Room, LiveData, ViewModel
, и я построил свой репозиторий, который загружает данные сети (анализирует xml)для этого я использую асинхронную задачу, но она никогда не выполняется.Вот сокращенный код для смелости:
public class CarSoundsRepository {
private MutableLiveData<List<CarEntry>> mAllCars;
CarSoundsRepository(Application application) {
new loadDataAsyncTask().execute();
}
LiveData<List<CarEntry>> getAllCars () {
return mAllCars;
}
private class loadDataAsyncTask extends AsyncTask<Void, Void, List<CarEntry>> {
@Override
protected List<CarEntry> doInBackground(Void... voids) {
List<CarEntry> carlist = null;
InputStream is = null;
try {
is = new URL("https://urllink").openStream();
} catch (IOException e) {
Log.e(TAG, "IO exception "+e);
}
if (is != null) {
try {
carlist = new MyXmlParser().parse(is);
} catch (XmlPullParserException e) {
Log.e(TAG,"XML Pareser exception "+e);
} catch (IOException e) {
Log.e(TAG,"IO exception" + e);
}
}
return carlist;
}
@Override
protected void onPostExecute(List<CarEntry> carEntries) {
mAllCars.setValue(carEntries);
}
}
}
Этот репозиторий создается в моем экземпляре ViewModel:
mRepository = new CarSoundsRepository(application);
И я получаю свою ViewModel в своей деятельности:
mViewModel = ViewModelProviders.of(this).get(CarSoundsViewModel.class);
Все работает нормально, за исключением того, что loadDataAsyncTask никогда не выполняется.Метод execute () вызывается, но никогда не переходит к методу doInBackground.
Есть идеи?