我在班级中有inner class
asynctask
。我在该内部类中定义了一些variables
arrays
。在doitbackground
中,我将一些值放入其中。
当我去onpostexecute
时,我可以使用它们,因为它们都在同一个内部阶层。
所以,我不需要返回通行证的东西?我真的很困惑。这是一个坏方法,我应该在doitbackground中定义所有这些吗?
因为如果我必须传递值,我需要定义包装器,因为我必须传递4-5个arraylists。它们是不同的类型。但现在我可以使用它们而不需要返回或通过。
我正在搜索,但没有关于此的信息。在所有asyntask示例中,它们定义了doitbackground之外的变量。
答案 0 :(得分:0)
我通常在doInBackground中创建一个包含这些字段的类,并将结果传递给该类。 如果发生错误,这也允许您传递null。
class DataClass {
private int someIntData;
private String someStringData;
}
new AsyncTask<Void, Void, DataClass>() {
@Override
protected DataClass doInBackground(Void... params) {
DataClass data = new DataClass();
// doing some job
if (!errorHappened) {
data.someIntData = 5;
data.someStringData = "Just an example string";
return data;
}
return null;
}
@Override
protected void onPostExecute(DataClass result) {
if (result != null) {
// handle the result
} else {
// error happened
}
}
};
答案 1 :(得分:0)
从技术上讲,你可以做到,但考虑一下封装概念
如你所知,
doitbackground 发生在另一个线程中,而不是ui线程
onpostexecute 在ui线程中发生
因此,有一种常见的模式可以在Constructor或Execute Argument中发送AsyncTask参数,通过这种方式,您可以确保Async类可以在其他应用程序中重用并完全封装。