Witam serdecznie ! !
O to Ja i kolejny problem :D
Zrobiłem Button, który po kliknięciu wywołuję metodę z klasy odpowiedzialnej za połączenie z Web Service Klientem, która dziedziczy po AsyncTask. Web Service zwraca mi XML, który następnie w postaci Stringa leci do metody, która potrzebne mi dane wrzuca do ArrayListy obiektów (obiekt ma 2 pola stringi). I teraz pojawia się problem bo Te wszystkie metody wywołuję w doInBackground i również Tutaj chcę wrzucić tą ArrayListę obiektów do ListView z mojego MainActivity. Nie wiem czy to dobry pomysł, czy lepiej zrobić oddzielną klasę do dodawania informacji do MainActivity. Ale nie w tym rzecz...
Jak prawidłowo dodać z innej klasy ArrayListę do ListView?? Albo nawet zwykły string do TextView?? Wiem, że można stworzyć klasę adaptera i wywołać jej obiekt w MainActivity a następnie przekazać ConvertView i za jego pomocą dodać listę do ListView, ale Ja chcę dodać ją z poziomu Klasy, która nie jest Activity.
Udało mi się napisać kod, który zmienia zawartość TextView z poziomu innej klasy (i zmiana jest widoczna na telefonie), ale potem mi wywala błąd i zamyka aplikację, także robię coś źle.
Poza tym moja Lista jest stworzona z obiektów, które składają się z 2 pól. Jak prawidłowo dodaję się listę z X pól do ListView?
Mam nadzieję, że problem opisałem dość jasno. O to kod samego doInBackground (myślę że tylko to jest istotne):
protected Object doInBackground(Object... arg0) {
String s = Send(); // metoda która pobiera xml z Webservice
XmlHelper xmlHelp = new XmlHelper(); //
ArrayList<EventB> array_events = xmlHelp.GetEvents(s); // metoda która wrzuca dane z XML do Arraya i zwraca Array obiektów
ArrayAdapter<EventB> adapter ;
TextView txt = (TextView)((Activity) this.context).findViewById(R.id.textView1);
ListView list = (ListView)((Activity) this.context).findViewById(R.id.ListEvents);
adapter = new ArrayAdapter<EventB>((Activity) this.context, R.layout.event_element, array_events);
list.setAdapter(adapter);
txt.setText("Aktualne Eventy:");
return null;
}
Błąd "Only the original thread that created a view hierarchy can touch its views"
EDIT!!
Ewentualnie mógłbym zwrócić z doInBackground Stringa, a potem z MainActivity wywołać metodę przerobienia go na ArrayListę, ale nie wiem czy można zwracać Stringa, poza tym doInBackground chodzi w tle =/.