【问题标题】:Android: if statement in AsyncTask doInBackgroundAndroid:AsyncTask doInBackground 中的 if 语句
【发布时间】:2015-09-25 04:03:00
【问题描述】:

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

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

这是我的异步任务:

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) {

        }
    }

【问题讨论】:

  • 您是否收到此版本代码的错误?检查复选框是否被选中的代码在哪里?
  • 我收到此版本的错误。我最初有 checkbox.isChecked(),我现在在 if 语句中有“true”。我用“true”替换了它,看看我是否会得到同样的错误。
  • 好吧,我问的原因与所选答案假设的原因相同(您正在从后台线程访问一个复选框),但我不明白那如何解决您的问题,如果您得到上面代码中删除的复选框语句的问题..

标签: java android android-asynctask


【解决方案1】:

您不能从非 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;
    }

}

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多