如何将值传递给AsyncTask Android

如何将值传递给AsyncTask Android,android,android-asynctask,Android,Android Asynctask,这是我第一次使用AsyncTask,对于传递值可能也有点困惑 我有4个ArrayLists,其中包含应该插入数据库的数据。我希望这个插入在后台完成。通过从我拥有的4个ArrayList中获取传递值,将至少有50行插入数据库,一次插入1行 有人能指导我怎么做吗 现在,我创建了一个子类InsertData,它扩展了AsyncTask:: private class InsertData extends AsyncTask<Params, Progress, Result>{

这是我第一次使用AsyncTask,对于传递值可能也有点困惑

我有4个
ArrayList
s,其中包含应该插入数据库的数据。我希望这个插入在后台完成。通过从我拥有的4个ArrayList中获取传递值,将至少有50行插入数据库,一次插入1行

有人能指导我怎么做吗

现在,我创建了一个子类InsertData,它扩展了AsyncTask::

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

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

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

你可以这样通过

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;
    }   
}
InsertData task = new InsertData (stg1, stg2, st3, stg4);    
task.execute();

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


您可以像这样直接将列表传递到
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;
    }   
}

不要对所有值使用ArrayList。。。只需使用一个Arraylist。你可以用豆子 e、 g

ArrayList aryitem=new ArrayList();
ItemBean是一个Bean类。。所以你可以在那里设置值。。然后从那里取回

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

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

aryItem.add(itemBean);
}       

for(inti=0;i我想它可能会对您有所帮助..您可以这样传递值

调用InsertData(AsynkTask)

在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;
        }   
}
类InsertData扩展异步任务
{
上下文ctx;
阵列列表li1、li2、li3、li4;
公共插入数据(上下文ct、ArrayList l1、ArrayList l2、ArrayList l3、ArrayList l4)
{
ctx=ct;
这1.li1=l1;
这是li2=l2;
这1.li3=l3;
这1.li4=l4;
dialog=新进度对话框(ct);
setProgressStyle(ProgressDialog.STYLE_微调器);
setMessage(“正在加载..请稍候..”);
对话框。可设置可取消(true);
}
@凌驾
受保护的结果doInBackground(参数…参数)
{
//做你的工作。。。
返回null;
}   
}

您可以将值传递给asynctask的构造函数或doInBackground().example@.doinBackground接收urlsYou可以使用构造函数来实现这一点,如我所说,我必须重复插入大约50次,我该怎么做?根据循环的大小,检查arraylist中有多少值可用。如果必须检索50次,则应使用我所说的Bean类。它这对你来说很容易,我会尽力给你回复的。这个答案也能解决这个问题吗?
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;
    }   
}
new InsertData().execute(list1, list2, list3, list4);
ArrayList<ItemBean> aryitem=new ArrayList<ItemBean>();
for (int i = 0; i <aryitem; i++)
{
  itemBean= new ItemBean();

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

aryItem.add(itemBean);
}       
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;
        }   
}