UMA*_*MAR 19 android android-asynctask
我正在使用以下代码来创建一个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");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想传递两个带有void进度和返回类型的参数customlistobject和File对象boolean.
我不知道如何将它与对象一起传递customlistobject给我.AsyncTaskFile
War*_*ith 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");
}
}
Run Code Online (Sandbox Code Playgroud)
此代码只是一个示例,您应该确保索引0和1处的对象实际上是File或您的CustomList instanceof.
Octavian Damiean也写了一个很好的方法......
如果您需要将两个对象作为参数传递,只需创建自己的持有者并将其发送给持有者对象.
您创建一个对象来保存您的自定义对象以及File对象.根据具体情况,您还可以使自定义对象只保存File对象并传递AsyncTask自定义对象.
在doInBackground方法内部只提取对象,以便您可以根据需要处理它们.
一种选择是让你的构造函数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]);
Run Code Online (Sandbox Code Playgroud)
另一个选项是将对象作为第一个类型参数传递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]);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为实际参数doInBackground()是varargs列表而不是单个对象.
| 归档时间: |
|
| 查看次数: |
19826 次 |
| 最近记录: |