java - Android:AsyncTask doInBackground 中的 if 语句

标签 java android android-asynctask

我正在尝试使用异步任务在 fragment 内的 TextView 中显示消息,但我只希望它在选中复选框时显示。如果我在 doInBackground 中添加 if 语句,我会收到错误:

1544-1553/android.process.acore E/StrictMode:在附加堆栈跟踪中获取资源但从未释放。有关避免资源泄漏的信息,请参阅 java.io.Closeable。 java.lang.Throwable: 未调用显式终止方法“close”

这是我的异步任务:

class displayMessages extends AsyncTask<Void, String, Void> {
        @Override
        protected void onPreExecute() {


        }

        @Override
        protected Void doInBackground(Void... nothing) {

            for (int i = 0; i < 100; i++) {
                String currentMessage = i + " " + message;
                if (true) {publishProgress(currentMessage);}
                sleepT(500);

            }

            return null;
        }

        @Override
        protected void onProgressUpdate(String... string) {
            super.onProgressUpdate(string);
                messageText.append(string[0] + "\n");


        }

        @Override
        protected void onPostExecute(Void result) {

        }
    }

最佳答案

您不能从非 gui 任务访问 gui 元素。 所以这是行不通的。

   @Override
    protected Void doInBackground(Void... nothing) {
       ...
       checkbox.isChecked(); // accessing a gui element

但是您可以在启动后台任务之前获取所需的信息,如下所示:

new displayMessages(checkbox.isChecked()).execute()

类看起来像这样

class displayMessages extends AsyncTask<Void, String, Void> {
    private Boolean shouldPublish;
    public displayMessages(Boolean shouldPublish) {
        this.shouldPublish = shouldPublish;
    }

   @Override
    protected Void doInBackground(Void... nothing) {

        for (int i = 0; i < 100; i++) {
            String currentMessage = i + " " + message;
            if (shouldPublish) {publishProgress(currentMessage);}
            sleepT(500);

        }

        return null;
    }

}

关于java - Android:AsyncTask doInBackground 中的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272426/

相关文章:

java - 这个RadioGroup布局或其LinearLayout父级是无用的

android - 如何修复 "Issue: Violation of Families Policy Requirements"

Android loopj + GCMIntentService 在死线程上向处理程序发送消息

java - 如何在 Android Activity 之间的 HttpContext 中保留 HTTP session cookie?

java - 在 libfontmanager.dylib 中将 OpenJDK9 与 FreeType @ref 捆绑在一起

android - 升级到 NDK 14 后无法在 C++ 代码中找到声明

java - 无法在 GridView 中显示包含 Pointer 字段的 Parse.com 对象的数据 - Android

java - 使用 Gridbag 布局时的动画。

带有参数的Java接口(interface)作为另一个接口(interface)

android - 如何创建异步任务以在加载屏幕上将声音加载到管理器中