多次执行AsyncTask? [Android]产品

时间:2016-03-16 04:40:34

标签: android android-asynctask

当用户点击按钮时,我调用这个方法,我想做多个AsyncTask调用来上传不同的东西。 (一些文字,照片,然后视频)。我执行第一个方法罚款(文本),但后来我无法启动下一个调用/执行(backgroundTask.execute),因为第一个没有完成。

我的问题:

  

如何调用我的AsyncTask,以便我可以一次上传所有内容? (单击一下按钮)

我尝试将其设置为onPostExecute,我更新了一个变量,然后在这个方法中,我有一个简单的if语句,检查该变量是否已经改变,但显然没有用。

我应该等待每个人完成下一个开始吗?或者我应该同时做什么?

Android代码:

public void UploadEverything(String encodedImage){
    //Gets the email form the user
    SharedPreferences UserCredentials = getSharedPreferences("UserCredentials", Context.MODE_PRIVATE);
    ProductOwnerEmail = UserCredentials.getString("UserEmail", "");


    String method = "ProductDetails";
    BackgroundTask backgroundTask = new BackgroundTask(this);
    backgroundTask.execute(method, ProductOwnerEmail, ProductName, Seller_Category, ProductKeyCode, DescriptionPoint, DescriptionPoint2, DescriptionPoint3);


    if (BackgroundTask.DetailsUploaded.equals("true")) {
        String PhotoMethod = "Photo";
        //BackgroundTask backgroundTask = new BackgroundTask(this);
        backgroundTask.execute(PhotoMethod, ProductOwnerEmail, ProductName, encodedImage);
    }


    if(BackgroundTask.PhotoUploaded.equals("true")) {
        String SevenSecVideoMethod = "7secVideo";
        //BackgroundTask backgroundTask = new BackgroundTask(this);
        backgroundTask.execute(SevenSecVideoMethod, ProductOwnerEmail, ProductName, String.valueOf(selectedPath));
    }




    Toast.makeText(SellerHomePage.this, "Product has been uploaded!", Toast.LENGTH_SHORT).show();
}

3 个答案:

答案 0 :(得分:1)

您的问题仍然不明确,但我理解的是 - 您只需点击一下按钮即可上传所有数据。所以这就是你如何做到的,

如果按钮点击事件调用asyncTask

@Override
public void onClick(View v) {
    yourAsyncTask.execute();
}

现在它将执行asyncTask,因此在asyncTask的onPreExecute()方法中,您可以获取要上传的所有数据。

@Override
public void onPreExecute() {
    field1 = //Some Text;
    field2 = //Any Image;
    field3 = //Any Video;
}

现在,在doInBackground()方法中,您可以将所有字段上传到您想要的任何位置。

答案 1 :(得分:0)

AsyncTask实例只能一次使用。

您可以创建新实例并且可以使用它,但是您不能在多个时间使用同一个实例,它会产生运行时错误。

必须在UI线程上调用

HSSFRow row = worksheet.createRow(last++);

- 请勿手动调用 execute(Params...)

因此,您可以将所有内容上传到一个AsyncTask ..

答案 2 :(得分:0)

仅供参考,如果您有上传和与服务器同步的数据,请使用服务或单独的线程并在队列中处理它。您可能知道'Volley'库与RequestQueue提供了非常好的集成(无缝),但我还没有尝试上传视频。 只需查看this link

即可