可以在调用Provider方法后直接调用finish()吗?

时间:2013-05-21 15:49:19

标签: android android-activity android-contentprovider bulkinsert activity-finish

设置: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:这是我的第一个应用程序,如果你看到应该处理得更好的代码,我也会听到。

1 个答案:

答案 0 :(得分:0)

所以主要的问题是:在调用Provider方法之后直接调用finish()是否可以。并且考虑到makovkastar的评论,解决方案不是在Provider方法调用之后直接调用finish(),而是执行类似的操作:

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。