当用户点击按钮时,我调用这个方法,我想做多个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();
}
答案 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