如何将值传递给AsyncTask Android

时间:2013-04-09 06:04:37

标签: android android-asynctask

这是我第一次使用AsyncTask,也可能有点混淆,关于传递值。

我有4个ArrayList<String>,其中包含应插入数据库的数据。我希望这个插入在后台完成。通过从我拥有的4个arraylists中传递值,将至少有50行插入到数据库中,并且一次插入1行。

有人可以指导我如何做到这一点吗?

现在我创建一个扩展AsyncTask :::

的子类InsertData
private class InsertData extends AsyncTask<Params, Progress, Result>{

        @Override
        protected Result doInBackground(Params... params) {
            // TODO Auto-generated method stub
            return null;
        }   
}

我在4个arraylists中有值,我需要从每个arraylist中检索1个条目并将4个值传递给数据库。我如何将这4个值传递给AsyncTask,以及如何重复此操作直到arraylists中有条目。

以下是将1行插入数据库:::

的数据库方法
public void insert_row(int count, String image_url, String name, String number) {
        // TODO Auto-generated method stub

        db.execSQL("INSERT INTO contacts VALUES('"+ count +"', '"+ image_url +"', '"+ name +"', '"+ number +"')");
    }

如果有人能够概述我如何实现这一点,那就太好了。

5 个答案:

答案 0 :(得分:8)

尝试以下操作,无论如何,您可以使用您需要的参数为InsertData创建构造函数,将它们存储在InsertData类字段中并在doInBackground()中使用。

private class InsertData extends AsyncTask<ArrayList, Progress, Result>{

            @Override
            protected Result doInBackground(ArrayList... params) {
                // TODO Auto-generated method stub
                ArrayList list1 = params[0];
                ArrayList list2 = params[1];
                ...
                return null;
            }   
    }

呼叫:

InsertData task = new InsertData();
task.execute(yourList1, yourList2, yourList3...);

答案 1 :(得分:1)

您可以直接将列表传递给doInBackground(),并在那里进行所有50次迭代。

private class InsertData extends AsyncTask<List<String>, Progress, Result>{

    @Override
    protected Result doInBackground(List<String>... params) {
        // TODO Auto-generated method stub
        List<String> list1 = params[0];
        List<String> list2 = params[1];
        List<String> list3 = params[2];
        List<String> list4 = params[3];

        // Do the 50 iterations here.        

        return null;
    }   
}

您可以将列表传递给此AsyncTask,如下所示: -

new InsertData().execute(list1, list2, list3, list4);

答案 2 :(得分:0)

你可以像这样传递

private class InsertData extends AsyncTask<Params, Progress, Result>{

    public InsertData(String stg1, String stg2, String stg3, String stg4) {

    } 

    @Override
    protected Result doInBackground(Params... params) {
        // TODO Auto-generated method stub
        return null;
    }   
}

像这样调用asynctask

InsertData task = new InsertData (stg1, stg2, st3, stg4);    
task.execute();

答案 3 :(得分:0)

不要使用ArrayList获取所有值...只需使用One Arraylist。你可以使用bean e.g

ArrayList<ItemBean> aryitem=new ArrayList<ItemBean>();

ItemBean是一个Bean类..所以你可以在那里设置值..并从那里检索。

for (int i = 0; i <aryitem; i++)
{
  itemBean= new ItemBean();

  itemBean.set(yourValues);
  itemBean.set(yourValues);

aryItem.add(itemBean);
}       

现在在doInBackground中调用public void insert_row(int count, String image_url, String name, String number)并传递aryItem。试试这个

答案 4 :(得分:0)

我认为它可能对你有帮助..你可以传递这样的价值......

调用InsertData(AsynkTask)

ArrayList list1,list2,list3,list4;

InsertData insertd = new InsertData(list1,list2,list3,list4)
insertd.execute();
在InsertData.java中

class InsertData extends AsyncTask<Object, Object, Object>
{
    Context ctx;
    ArrayList li1,li2,li3,li4;
    public InsertData(Context ct,ArrayList l1,ArrayList l2,ArrayList l3,ArrayList l4)
    {
        ctx = ct;

        this.li1 = l1;
        this.li2 = l2;
        this.li3 = l3;
        this.li4 = l4;

        dialog = new ProgressDialog(ct);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setMessage("Loading.. Please Wait..");
        dialog.setCancelable(true);
    }

        @Override
        protected Result doInBackground(Params... params)
        {
            // Do your Work...

            return null;
        }   
}