我使用以下代码创建AsyncTask
。
public class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{
protected Boolean doInBackground(File... file) {
DalCategories c= new DalCategories();
boolean result = c.saveObject(customlistobject,file[0]);
return result;
}
protected void onProgressUpdate() {
//setProgressPercent(progress[0]);
}
protected void onPostExecute(boolean result) {
//showDialog("Downloaded " + result + " bytes");
}
}
现在我想传递两个参数customlistobject
和File
对象,其中包含void进度和boolean
返回类型。
我不知道如何将customlistobject
与AsyncTask
对象一起传递给File
。
答案 0 :(得分:21)
一个不完美但有效的解决方案是使用Object作为参数。
public class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{
protected Boolean doInBackground(Object... param) {
File file = (File) param[0];
List list = (CustomList) param[1];
return result;
}
protected void onProgressUpdate()
{
//setProgressPercent(progress[0]);
}
protected void onPostExecute(boolean result)
{
//showDialog("Downloaded " + result + " bytes");
}
}
此代码只是一个示例,您应该使用instanceof
确保索引0和1处的对象确实是File或CustomList。
Octavian Damiean也写了一个很好的方法......
答案 1 :(得分:7)
如果您需要将两个对象作为参数传递,只需创建自己的持有者并将其发送给持有者对象。
您创建一个对象,该对象包含您的自定义对象以及File对象。根据具体情况,您还可以使自定义对象只保留File对象并传递AsyncTask
自定义对象。
doInBackground
方法内部只提取对象,以便您可以根据需要进行处理。
答案 2 :(得分:7)
一个选项是让AsyncTask
的构造函数采用这些参数
public class SaveFileToExternalStorage extends AsyncTask<File, Void, Boolean>{
List customlistobject;
public SaveFileToExternalStorage(List aList) {
customlistobject = aList;
}
protected Boolean doInBackground(File... file) {
DalCategories c= new DalCategories();
boolean result = c.saveObject(customlistobject,file[0]);
另一个选项是将对象作为AsyncTask
的第一个类型参数传递:
public class SaveFileToExternalStorage extends AsyncTask<Object, Void, Boolean>{
protected Boolean doInBackground(Object... objs) {
File file = (File) ibjs[1];
List customlistobject = (List) objs[2];
DalCategories c= new DalCategories();
boolean result = c.saveObject(customlistobject,file[0]);
这是有效的,因为doInBackground()
的实际参数是varargs列表而不是单个对象。