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