Загрузчик обрабатывает данные даже после onLoadFinished
Я сохраняю данные с сервера в локальную базу данных в AsyncLoader(внутри метода onLoadFinished я начинаю следующую операцию, где хочу отобразить сохраненные данные), но база данных фактически пуста, также это происходит только при добавлении новых данных (я имею в виду, что это работает хорошо с существующими записями базы данных), как я могу это исправить?
Деятельность
public class LoadingActivity extends AppCompatActivity implements android.app.LoaderManager.LoaderCallbacks<ArrayList> {
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.laoding_activity);
context = this;
Bundle bundle = new Bundle();
getLoaderManager().initLoader(0, bundle, this).forceLoad();
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(Utils.MANUAL_START_RECIEVER);
sendBroadcast(broadcastIntent);
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public android.content.Loader<ArrayList> onCreateLoader(int id, Bundle args) {
DatabaseWorker loader= null;
args.putString(Utils.INTENT_SERVICE_INVOKE,Utils.LOAD_All_DATA);
loader = new DatabaseWorker(this,args);
return loader;
}
@Override
public void onLoadFinished(android.content.Loader<ArrayList> loader, ArrayList data) {
Log.e("adad",App.session.getActionsGreenDao().loadAll().size()+"");
startActivity(new Intent(this,MainActivity.class));
}
@Override
public void onLoaderReset(android.content.Loader<ArrayList> loader) {
}
}
loadInBackground
@Override
public ArrayList loadInBackground() {
Log.e("loader created","loading");
switch (command) {
case Utils.LOAD_All_DATA: {
saveActivities();
savePersons();
savePictureData();
return new ArrayList();
}
case Utils.READ_ACTIONS_DATA: {
readActionData();
return (ArrayList) Action.listAll(Action.class);
}
case Utils.READ_PERSONS_DATA: {
readPersonsData();
return (ArrayList) Person.listAll(Person.class);
}
default:{
return new ArrayList();
}
}
}
1 ответ
Какую базу данных вы используете? А как вы вставляете данные? Как я понял, вы делаете это в асинхронной транзакции. После этого вызывается метод onLoadFinished. Но операция фиксации в БД требует времени, зависит от размера данных. Вот почему ваш БД пуст в пользовательском потоке. Вы можете проверить это. Например, вот так:
new Handler(getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
Log.e("adad",App.session.getActionsGreenDao().loadAll().size()+"");
startActivity(new Intent(this,MainActivity.class));
}
},1000);