AsyncTask - Parameter

  • Antworten:4
  • Bentwortet
Alex K
  • Forum-Beiträge: 22

11.07.2011, 10:18:08 via Website

Guten Morgen,
ich spiel gerade mit AsyncTask's herum und verzweifle an der übergabe von mehreren Parametern.

Was ich versuche...
Ich möchte der AsyncTask 2 Parameter übergeben, einen Context und ein JSONArray.
Mithilfe des Context möchte ich dann innerhalb der Task eine Instanz des DBAdapters erzeugen (s. u. Source-1).
Im Anschluss dann das JSONArray auswerten und in die DB speichern, deshalb die DBAdapter Instanz.

Leider weigert sich google wiedermal mir etwas hilfreiches zu liefern, vielleicht könnt ihr mir ja ein bisschen auf die Sprünge helfen.


Viele Grüße,
Alex

Source-1
1public DBAdapter(Context ctx)
2 {
3 this.context = ctx;
4 DBHelper = new DatabaseHelper(context);
5 }
Von hier habe ich den Code: DBAdapter von devx.com

Antworten
Alex K
  • Forum-Beiträge: 22

11.07.2011, 11:55:30 via Website

Hey,
ich hab gerade eine Lösung für mein Problem gefunden.

Hier ist sie...
1public class MeineKlasse {
2
3 // Zugriff auf die Datenbank in der Klasse "MeineKlasse"
4 private static DBAdapter db;
5
6 public void meineFunktion(JSONArray meinText, DBAdapter DBAvonActivity) {
7
8 // "db" den übergebenen DBAdapter "DBAvonActivity" zuweisen
9 db = DBAvonActivity;
10
11 // Hier werden die AsyncTask's aufgerufen
12 new MeineTestAsyncTask().execute(meinText);
13 }
14
15 // hier sind die Task's definiert... z. B.
16 private class MeineTestAsyncTask extends AsyncTask<JSONArray, Void, Void> {
17 protected Void doInBackground(JSONArray... meinJson) {
18 // db.open
19 // db.insert...
20 // db.close
21 }
22 }
23}

Ich habe meiner Klasse "private static DBAdapter db;" hinzugefügt, dem ich in "meineFunktion" den übergebenen DBAdapter zuweise.
Damit kann ich in der ganzen Klasse auf meine Datenbank zugreifen.

Ist bestimmt nicht perfekt, aber immerhin geht es. :)


Viele Grüße,
Alex

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

11.07.2011, 12:23:28 via Website

du kannst einfach einen Konstruktor zu deinem Asynctask hinzufügen, der die 2 parameter entgegen nimmt.

public class MyTask extends Asynct...... {

public MyTask(Context ctx, Adapter db) {
}


doInBackground.....

}

Dann sparst dir die Klasse drum rum

swordiApps Blog - Website

Antworten
Alex K
  • Forum-Beiträge: 22

11.07.2011, 12:40:57 via Website

Hallo Markus,
darauf hätte ich auch selbst kommen können... :D

Vielen Dank, so ist dass viel besser! :)


Viele Grüße,
Alex

Antworten
Alex K
  • Forum-Beiträge: 22

12.07.2011, 13:16:19 via Website

Hallo,
leider habe ich noch ein kleines Problem.
Ich bekomme folgenden Fehler:
107-12 11:11:30.961: ERROR/AndroidRuntime(598): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Mein AsyncTask ist in einer eigenen Datei, deshalb der Fehler?


Viele Grüße,
Alex


Edit: Hat sich von selbs gelöst. :)

— geändert am 12.07.2011, 13:51:29

Antworten