即使在onLoadFinished

时间:2016-11-12 15:31:29

标签: android android-asynctask android-loadermanager android-loader

我将数据从服务器保存到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();
            }
        }
    }

1 个答案:

答案 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);