无法在android中的UI线程上从网络中检索内容。 我正试图解决这个问题......
for(i=0;i<list.size();i++){
//add a UI element
new Thread(new Runnable(){
public void run(){
//retrieve online content
}
}).start();
LinearLayout.addView(MyView);
}
中的类似示例线程内的部分使用get()方法访问列表。当“i”应该为0以获得列表中的第一项“i”实际上是1并且如果只有一个项目则导致OutOfBoundsException。我猜这里有线程安全问题。有没有一种简单的方法来解决这个问题?
答案 0 :(得分:2)
阅读此http://developer.android.com/reference/android/os/AsyncTask.html以使用AsyncTask
在后台执行任务,而不是使用Threads
。
AsyncTasks提供了很好的包装来执行后台任务和postExecute任务(直接在UI线程上)等。
编辑:
同样来自你的代码,我不确定这是否正确...看起来你正在为list
中的每个元素运行一个线程。
并且是
LinearLayout.addView(MyView);
真的取决于你在后台执行的任务吗?如果是,请在从网络(以及线程内)检索所有数据后执行一次,因为只有您知道该任务已完成。如果不是那么没有理由把它放在这里..
相反,您必须运行单个线程(更好的异步任务)才能从网络中检索,并在线程/任务结束时显示/更新UI ...