0

设置:FirstActivity打开SecondActivity,SecondActivity要求用户选择图片,给他们标题;当用户完成后,他们单击“保存”按钮,该按钮调用调用批量插入的方法 saveToDatabase。希望用户在单击“保存”按钮后返回到 FirstActivity。

这是当前的设置:

private void saveToDatabase() {
    int arraySize = beanList.size();
    ContentValues[] valuesArray = new ContentValues[arraySize];

    ContentValues values;
    String imageuri;
    String title;
    int counter = 0;

    for(Bean b : beanList){
        imageuri = b.getImageUri();
        title = b.getImageTitle();

        values = new ContentValues();           
        values.put(CollectionsTable.COL_NAME, nameOfCollection);
        values.put(CollectionsTable.COL_IMAGEURI, imageuri);
        values.put(CollectionsTable.COL_TITLE, title);
        values.put(CollectionsTable.COL_SEQ, counter +1);

        valuesArray[counter] = values;
        counter++;
    }
    getContentResolver().bulkInsert(CollectionsContentProvider.CONTENT_URI, valuesArray);   

    // Does this squash the db/provider call? This is working now but will it always?       
    finish();               
}

......它正在工作,但我一直担心它可能不会一直工作。所以我的问题是,是在出现问题finish()后直接打电话吗?getContentResolver().bulk...有没有更好的方法来处理我正在尝试做的事情(保存到数据库并将用户返回到以前的活动以响应一个用户事件)?谢谢你。PS:这是我的第一个应用程序,如果您看到应该更好地处理的代码,我也会对此表示赞同。

4

1 回答 1

0

所以主要问题是:finish()在 Provider 方法调用之后直接调用是否可以。鉴于 makovkastar 的评论,解决方案不是finish()在 Provider 方法调用之后直接调用,而是执行以下操作:

private void saveToDatabase() {
    int arraySize = beanList.size();
    final ContentValues[] valuesArray = new ContentValues[arraySize];

    ContentValues values;
    String imageuri;
    String title;
    int counter = 0;

    for(Bean b : beanList){
        imageuri = b.getImageUri();
        title = b.getImageTitle();

        values = new ContentValues();           
        values.put(CollectionsTable.COL_NAME, nameOfCollection);
        values.put(CollectionsTable.COL_IMAGEURI, imageuri);
        values.put(CollectionsTable.COL_TITLE, title);
        values.put(CollectionsTable.COL_SEQ, counter +1);

        valuesArray[counter] = values;
        counter++;
    }

    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

        @Override
        protected Void doInBackground(Void... arg0) {
            getContentResolver().bulkInsert(CollectionsContentProvider.CONTENT_URI, valuesArray);   
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            finish();   
        }           
    };

    task.execute();                 
}

这行得通,现在我以前的恐惧得到了缓解。谢谢,makovkastar。

于 2013-05-21T20:49:51.680 回答