我正在使用以下代码在特定时间后更新列表。
Myactivity {
setTimer() {
Runnable r = new Runnable() {
run() {
if(!isListUpdated) {
update();//n/w operation
} else {
show();//this is a UI operation
listupdated = false;
}
Handler.postDelayed(this,next); //repeat after next
}
new Thread(r).start();
}
}
}
在2-3次迭代之后,它给出了NetworkOnMainThreadException
。有人能说出这段代码中哪里出了问题吗?
发布于 2012-07-09 14:58:19
你不应该在主线程中进行网络操作。创建一个单独的线程并在那里执行nw操作。
您可以使用AsyncTask、服务或独立线程。您将在其中进行网络操作。并通过BroadcastReceiver、处理程序或AsyncTask进行更新。
阅读有关AsyncTask here的信息
发布于 2012-07-09 14:59:11
当您尝试在主线程中执行网络操作时,通常会发生此异常。使用AsyncTask
进行网络操作。
发布于 2012-07-09 15:07:42
考虑使用runOnUiThread
在非UI线程中执行UI操作。
您的代码片段应该如下所示。
Runnable runnable = new Runnable() {
public void run() {
if (!isListUpdated) {
runOnUiThread(new Runnable() {
public void run() {
update(); //n/w operation
}
});
} else {
runOnUiThread(new Runnable() {
public void run() {
show(); //n/w operation
}
});
listupdated = false;
}
handler.postDelayed(runnable, next);
}
};
https://stackoverflow.com/questions/11390305
复制相似问题