我试图在不同的线程中填充我的应用程序中的微调器。可以告诉我为什么以下代码不起作用?
以下代码位于oncreate()方法
中Thread asyn = new Thread(){
public void run(){
try{
int klok = 0;
while(klok < 5000){
sleep(100);
klok = klok + 100;
}
try{
String[] items = new String[] {"One", "Two", "Three"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(Materiaal.this, android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter);
}catch(Exception ex){
ex.printStackTrace();
}finally{
//adapter.notifyDataSetChanged();
}
}catch(InterruptedException ex){
ex.printStackTrace();
}
}
};
asyn.start();
答案 0 :(得分:2)
我认为你应该使用Activity中的方法runOnUiThread(Runnable r)。
也许做这样的事情
void run()
{
// do stuff
.
.
.
activity.runOnUiThread(new Runnable()
void run()
{
spinner1.setAdapter(adapter);
}
);
}
我希望它有所帮助..
答案 1 :(得分:1)
您必须从错误的线程异常中获取View。
当你想从主线程以外的地方执行任何UI操作时,你应该使用runOnUi(YOUR_RUNNABLE)。
答案 2 :(得分:1)
我很确定您遇到的错误是因为您无法通过非UI线程的其他线程更新UI。
要完成您想要的任务,您应该使用AsyncTask(http://developer.android.com/resources/articles/painless-threading.html),在doInBackground()
方法中完成工作,最后在方法onPostExecute()
中更新您的界面。