Java Android:AsyncTask doInBackground中的if语句

Java Android:AsyncTask doInBackground中的if语句,java,android,android-asynctask,Java,Android,Android Asynctask,我试图使用asynctask在片段内的TextView中显示消息,但我只希望在选中复选框时显示消息。如果在doInBackground中添加If语句,则会收到错误: 1544-1553/android.process.acore E/StrictMode﹕ 已在附加的堆栈跟踪中获取资源,但从未释放。有关避免资源泄漏的信息,请参阅java.io.Closeable。 java.lang.Throwable:未调用显式终止方法“close” 以下是我的任务: class displayMessage

我试图使用asynctask在片段内的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) {

        }
    }
类显示消息扩展异步任务{
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的Void doInBackground(Void…nothing){
对于(int i=0;i<100;i++){
字符串currentMessage=i+“”+消息;
if(true){publishProgress(currentMessage);}
睡眠(500);
}
返回null;
}
@凌驾
受保护的void onProgressUpdate(字符串…字符串){
super.onProgressUpdate(字符串);
messageText.append(字符串[0]+“\n”);
}
@凌驾
受保护的void onPostExecute(void结果){
}
}

您无法从非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;
    }

}
类显示消息扩展异步任务{
私有布尔应公开;
公共显示消息(布尔shouldPublish){
this.shouldPublish=shouldPublish;
}
@凌驾
受保护的Void doInBackground(Void…nothing){
对于(int i=0;i<100;i++){
字符串currentMessage=i+“”+消息;
if(shouldPublish){publishProgress(currentMessage);}
睡眠(500);
}
返回null;
}
}

此版本的代码是否存在错误?关于检查复选框是否被选中的代码在哪里?这个版本有一个错误。我最初有checkbox.isChecked(),现在if语句中有“true”。我将其替换为“true”,以查看是否会出现相同的错误,我确实是这样做的。我问的原因与所选答案假设的原因相同(您是从后台线程访问复选框),但我不明白如果您在上面的代码中删除了checkbox语句,那么这将如何解决您的问题。。