我正在尝试使用异步任务在 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/