Как передать различные объекты в качестве параметра в AsycTask?
Я использую следующий код для создания 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
.
Ответы
Ответ 1
Не идеальным, но рабочим решением является использование объекта как параметра.
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");
}
}
Этот код является всего лишь образцом, вы должны убедиться, что объекты с индексом 0 и 1 действительно являются файлом или вашим пользовательским списком с помощью instanceof
.
Октавиан Дамиан также написал хороший метод...
Ответ 2
Если вам нужно передать два объекта в качестве параметра, просто создайте свой собственный держатель и отправьте его объектам держателя.
Вы создаете объект, который содержит ваш пользовательский объект вместе с объектом File. В зависимости от ситуации вы также можете сделать свой пользовательский объект просто удержанием объекта File и передать AsyncTask
пользовательский объект.
Внутри метода doInBackground
просто извлекайте объекты, чтобы вы могли их обрабатывать по мере необходимости.
Ответ 3
Один из вариантов состоит в том, чтобы иметь конструктор вашего 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, а не один объект.