这是我第一次使用AsyncTask,也可能有点混淆,关于传递值。
我有4个ArrayList<String>
,其中包含应插入数据库的数据。我希望这个插入在后台完成。通过从我拥有的4个arraylists中传递值,将至少有50行插入到数据库中,并且一次插入1行。
有人可以指导我如何做到这一点吗?
现在我创建一个扩展AsyncTask :::
的子类InsertDataprivate 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 +"')");
}
如果有人能够概述我如何实现这一点,那就太好了。
答案 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();
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;
}
}