我将数据从服务器保存到AsyncLoader中的本地数据库(在onLoadFinished方法中,我开始下一个活动,我想显示保存的数据),但数据库实际上是空的,也只有在添加新数据时才会发生(i意味着它适用于现有的数据库记录),我该如何解决这个问题?
活动
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();
}
}
}
答案 0 :(得分:0)
你使用什么样的数据库?你如何插入数据?据我所知,你是在异步线程事务中做的。在该方法之后调用onLoadFinished。但db中的提交操作需要一些时间取决于数据大小。这就是为什么你的db在ui线程中是空的。你可以检查一下。例如:
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);