я не копирую весь код, потому что он слишком длинный, но чтобы быть кратким:
У меня есть функция (recup_list_internet), в которой есть поток, который извлекает данные из Интернета (XML), декодирует их и назначает каждый «узел» элементу в моем адаптере.
При выполнении декодирования вне потока все работает нормально. Поэтому я модифицирую это для использования внутри потока, создаю в нем функцию void run(), отображающую мой progressDialog, декодирование, данные хорошо извлекаются, хорошо назначаются моей карте (= new HashMap();), и вот где появляется проблема
private void recup_list_internet()
{
final ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
final Context mContext=this.getBaseContext();
Thread t = new Thread()
{
public void run()
{/* the code here works fine, not displaying it to be more concise*/
progressDialog.dismiss(); //works fine
SimpleAdapter mSchedule = new SimpleAdapter (mContext, listItem, R.layout.affiche_boutique,new String[] {"img", "titre", "description","Prix","uniqueID"}, new int[] {R.id.img,R.id.titre, R.id.description,R.id.prix,R.id.uniqueID}); //works fine
maListViewPerso.setAdapter(mSchedule); //doesn't work
}
};
t.start();
}
вот мой лог кот:
11-04 19:20:33.070: E/recuperation phonster(546): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Кажется, что я не могу "получить доступ" к maListViewPero, находясь в своем потоке... (maListViewPerso определен ранее в моем коде onCreate:
public class DisplayInternet extends Activity{
private ListView maListViewPerso;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.ceinture_lv);
maListViewPerso = (ListView) findViewById(R.id.listviewperso);
recup_list_internet();
}
Итак, где я могу поместить эту строку, чтобы она работала? "maListViewPerso.setAdapter(mSchedule);"
потому что я уже пытаюсь объявить mSchedule вне своего потока (в финале), но внутри своего потока, я не могу получить к нему доступ (и поэтому я не могу использовать его после строки «t.start()»