AsyncTask im onPostExecute() auf Activity zugreifen

  • Antworten:3
  • Bentwortet
Jamarilo
  • Forum-Beiträge: 9

04.06.2012, 20:17:27 via Website

Hallo Miteinander

Ich bin neu hier bei Android Pit obwohl ich schon seit 2 Jahre täglicher Besucher dieser Seite bin :bashful:

So was mich zu euch führt, ich habe angefangen ein wenig Android zu Programmieren und bin auf folgendes problem gestossen:

Kurze Einleitung:

Ich habe einen Webservice auf dem ich eine Datenbank habe die mittels PHP die ich geschriben haben, die Einträge ausliesst und in JSON verpackt. Nun will ich das ganze JSON Packet abholen und natürlich mittels Android verarbeiten.
Ich nutze einen AsyncTask den ich als eigen Klasse implementiert habe, instanziert wird diese AsyncTask Klasse über meine Haupt Activity.

1public class DBTestActivity extends ListActivity {
2
3
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7
8 setContentView(R.layout.main);
9
10 new ConnectionDB().execute();
11
12 }
13}

Meine AsynTask Klasse

1public class ConnectionDB extends AsyncTask <Void, Void, ArrayList<String>>{
2
3 InputStream is;
4 ArrayList<String> results;
5 JSONObject json_data;
6
7 public ConnectionDB(){
8
9 results = new ArrayList<String>();
10 }
11
12@Override
13 protected ArrayList<String> doInBackground(Void... arg0) {
14
15 // HIer wird zu der DB verbunden und das JSON in eine ArrayList von Strings hinein geschrieben
16 }
17
18protected void onPostExecute(ArrayList<String> items) {
19
20 // Und hier möchte ich meine Liste anzeigen lassen
21 }

Also ich will in der onPostExecute() Methode diese ArrayList von Strings auf meinem Telefon ausgeben aber leider weiss ich nicht
genau wie, ich kann nicht auf die Activity Klasse und das ganze R.Layout zugreiffen da ich mich nicht in dieser Klasse befinde.... Und genau da
wäre ich auf euro Hilfe angewiesen. Kann mir jemand einen Richtung weisen oder geht das so gar nicht....???

Antworten
Aeefire
  • Forum-Beiträge: 172

04.06.2012, 21:50:36 via Website

Du könntest den Context als Parameter beim Aufrufen des AsyncTasks im Konstruktur oder in der .execute(PARAMETER) als parameter übergeben und damit dann auf den ListView referenzieren! das müsste eigentlich ganz gut klappen.. gib mir ne minute und ich such nen beispiel aus meinem code!

1ListView lv = (ListView)((Activity) mContext).findViewById(R.id.showlistview123);

Ist meine Referenz auf den ListView! Damit müsste es gehen ;)

— geändert am 04.06.2012, 21:52:32

Jamarilo

Antworten
Jamarilo
  • Forum-Beiträge: 9

04.06.2012, 22:14:38 via Website

Aeefire ich danke dir viel mals als ich nur scho deine Antwort gelsen haben war mir sofort klar was ich
machen muss :grin:
Ich danke dir viel Mals.... Hat sofort geklappt...!!

1@Override
2 public void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4
5 ListActivity activity = this;
6
7 new ConnectionDB(activity).execute();

ich übergebe von Angfang an eine ListActivity damit ich es auf der anderen Seite nicht mehr Casten muss. :grin:

Antworten
Aeefire
  • Forum-Beiträge: 172

06.06.2012, 23:08:42 via Website

so geht's natürlich auch. Ist vielleicht sogar schöner, wenn man nur die Activity selbst braucht... bzw.. mit activity.getContext() würde man wohl auch den Context bekommen.

egal, hauptsache es funktioniert für dich ;)

Antworten