我正在开发一个Android应用程序,我使用Eclipse作为IDE,我的数据库是MySQL。我有以下问题。当我尝试通过AsynTask从数据库中获取数据时,我有下面显示的错误。
android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy
can touch its views
的活动:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
asyn=new MyAsyncTask();
tvtexto=(TextView)findViewById(R.id.tvtextoMa);
context = getApplicationContext();
eventos = new ArrayList<Eventos>();
eventosAdapter = new EventosAdapter(context, R.layout.filae, eventos);
eventos=new ArrayList<Eventos>();
asyn.execute();
listView = (ListView)findViewById(R.id.ListView01Ma);
}
的AsyncTask:
public class MyAsyncTask extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... arg0)
{
eventos=(ArrayList<Eventos>) BDEventos.getDatosEventos();
for(Eventos n:eventos){
eventosAdapter.add(n);
}
eventosAdapter.notifyDataSetChanged();
listView.setAdapter(eventosAdapter);
return null;
}
}
答案 0 :(得分:0)
无法从后台线程更新ui。 `doInbackground在后台线程上调用。 Ui应该在ui线程上更新。
在doInbackground
返回结果中获取您的数据表单数据库,并在onPostExecute
中相应地更新ui。
eventosAdapter.notifyDataSetChanged();
listView.setAdapter(eventosAdapter);
应该在onPostExecute