可以在onpostexecute中使用doitbackground中的变量

时间:2015-12-10 19:04:19

标签: android android-asynctask

我在班级中有inner class asynctask。我在该内部类中定义了一些variables arrays。在doitbackground中,我将一些值放入其中。

当我去onpostexecute时,我可以使用它们,因为它们都在同一个内部阶层。

所以,我不需要返回通行证的东西?我真的很困惑。这是一个坏方法,我应该在doitbackground中定义所有这些吗?

因为如果我必须传递值,我需要定义包装器,因为我必须传递4-5个arraylists。它们是不同的类型。但现在我可以使用它们而不需要返回或通过。

我正在搜索,但没有关于此的信息。在所有asyntask示例中,它们定义了doitbackground之外的变量。

2 个答案:

答案 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类可以在其他应用程序中重用并完全封装。