Falscher Context im Konstruktor von SimpleCursorAdapter!?

  • Antworten:2
Peter Panne
  • Forum-Beiträge: 7

11.05.2013, 17:38:12 via Website

Hallo zusammen,

ich versuche mich gerade ein bisschen in der Android/Java Programmierung. Ziel meiner App ist folgendes: Ein Benutzer gibt über ein Textfeld seinen Namen ein und betätigt einen Button. Sein Name wird daraufhin in einer SQL Datenbank abgelegt und gleichzeitig in einer Liste angezeigt. Das Layout besteht also aus Textfeld, Button und Liste. Der Name wird erfolgreich in die SQL Datenbank gespeichert. Das habe ich bereits mit dem Emulator getestet. Das Problem besteht jetzt für mich darin, den Inhalt der SQL Datenbank in der Liste anzuzeigen. Konkret wird mir ein Fehler angezeigt und zwar in Zeile 148 ("The constructor of SimpleCursorAdapter is undefined"):

1DatenAdapter = new SimpleCursorAdapter(
2 this,
3 R.layout.benutzerinfo,
4 cursor,
5 columns,
6 to,
70);


Laut Doku sieht der Konstruktor so aus:

1SimpleCursorAdapter (Context context, int layout, Cursor c, String[] from, int[] to, int flags)

Ich denke, dass das Problem das "this" ist, da es wahrscheinlich auf die falsche Klasse zeigt (Die Zeile befindet sich nämlich in einer Unterklasse). Die Frage ist nur: Wie ist es richtig?

Sorry für die doofe Formatierung.

Danke;-)

Gruß
Peter

Quellcode:

1public class BenutzerverwaltungActivity extends Activity implements OnClickListener {
2
3 private Button Erstellen;
4 private EditText Spielername;
5
6 private BenutzerDatenbank db;
7 private SimpleCursorAdapter DatenAdapter;
8
9 @Override
10 public void onCreate(Bundle savedInstanceState) {
11 super.onCreate(savedInstanceState);
12 setContentView(R.layout.activity_spielerstellen);
13
14 //ArrayList<String> Listeneintrage = new ArrayList<String>();
15 //ListAdapter ListenAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, Listeneintrage);
16
17 db = new BenutzerDatenbank(this);
18
19 Erstellen = (Button)findViewById(R.id.button1);
20 Spielername = (EditText)findViewById(R.id.editText1);
21 //Listeneintrage.add("Test");
22
23
24 //ListView meineListView = (ListView) findViewById(R.id.listView1);
25 //meineListView.setAdapter(ListenAdapter);
26
27 this.Erstellen.setOnClickListener(this);
28
29 db.ListeAnzeigen();
30 }
31
32 @Override
33 public void onClick(View v) {
34 CharSequence Name;
35 String Foto;
36
37 //BenutzerDatenbank db = new BenutzerDatenbank(this);
38
39 Name = this.Spielername.getText();
40 Foto = "Test";
41
42 if(v==Erstellen){
43 db.NeuerEintrag(Foto, Name);
44 db.ListeAnzeigen();
45 }
46
47 }
48
49
50
51
52class BenutzerDatenbank extends SQLiteOpenHelper{
53
54 //-----Attribute-----
55 private final String TAG = BenutzerDatenbank.class.getSimpleName();
56
57 // Name und Version der Datenbank
58 private static final String DATABASE_NAME = "Benutzer.db";
59 private static final int DATABASE_VERSION = 1;
60
61 // Name und Attribute der Tabelle "mood"
62 public static final String _ID = "_id";
63 public static final String TABLE_NAME_BENUTZER = "Benutzer";
64 public static final String BENUTZER_NAME = "Benutzername";
65 public static final String BENUTZER_FOTO = "Foto";
66
67 // Tabelle "Benutzer" anlegen
68 private static final String TABLE_BENUTZER_CREATE
69 = "CREATE TABLE "
70 + TABLE_NAME_BENUTZER + " (" + _ID
71 + " INTEGER PRIMARY KEY AUTOINCREMENT, "
72 + BENUTZER_NAME + " STRING, "
73 + BENUTZER_FOTO + " STRING);";
74
75 // Tabelle mood löschen
76 private static final String TABLE_BENUTZER_DROP =
77 "DROP TABLE IF EXISTS "
78 + TABLE_NAME_BENUTZER;
79
80 //-----Methoden-----
81 BenutzerDatenbank(Context context) {
82 super(context, DATABASE_NAME, null, DATABASE_VERSION);
83 }
84
85 @Override
86 public void onCreate(SQLiteDatabase db) {
87 db.execSQL(TABLE_BENUTZER_CREATE);
88 }
89
90 @Override
91 public void onUpgrade(SQLiteDatabase db,
92 int oldVersion, int newVersion) {
93 Log.w(TAG, "Upgrade der Datenbank von Version "
94 + oldVersion + " zu "
95 + newVersion
96 + "; alle Daten werden gelöscht");
97 db.execSQL(TABLE_BENUTZER_DROP);
98 onCreate(db);
99 }
100
101 public void NeuerEintrag(String Foto, CharSequence Benutzername){
102 CharSequence Benutzer;
103 String sBenutzername;
104
105 Benutzer=Benutzername;
106 sBenutzername = Benutzer.toString();
107
108 long rowId = -1;
109 try {
110 // Datenbank öffnen
111 SQLiteDatabase db = getWritableDatabase();
112 // die zu speichernden Werte
113 ContentValues values = new ContentValues();
114 values.put(BENUTZER_NAME, sBenutzername);
115 values.put(BENUTZER_FOTO, Foto);
116 // in die Tabelle mood einfügen
117 rowId = db.insert(TABLE_NAME_BENUTZER, null, values);
118 } catch (SQLiteException e) {
119 Log.e(TAG, "insert()", e);
120 } finally {
121 Log.d(TAG, "insert(): rowId=" + rowId);}
122 }
123
124 public Cursor Abfrage() {
125 // ggf. Datenbank öffnen
126 SQLiteDatabase db = getWritableDatabase();
127 return db.query(TABLE_NAME_BENUTZER, null, null, null, null, null,
128 BENUTZER_NAME + " DESC");
129 }
130
131 void ListeAnzeigen(){
132 Cursor cursor = db.Abfrage();
133
134 // The desired columns to be bound
135 String[] columns = new String[] {
136 BenutzerDatenbank.BENUTZER_NAME,
137 BenutzerDatenbank.BENUTZER_FOTO,
138 };
139
140 // the XML defined views which the data will be bound to
141 int[] to = new int[] {
142 R.id.Benutzername,
143 R.id.Foto,
144 };
145
146 // create the adapter using the cursor pointing to the desired data
147 //as well as the layout information
148 DatenAdapter = new SimpleCursorAdapter(
149 this,
150 R.layout.benutzerinfo,
151 cursor,
152 columns,
153 to);
154
155 ListView listView = (ListView) findViewById(R.id.listView1);
156 listView.setAdapter(DatenAdapter);
157 }
158}
159}

Antworten
Peter Panne
  • Forum-Beiträge: 7

11.05.2013, 18:38:44 via Website

Super, danach habe ich gesucht. Hat geklappt. Und die App funktioniert:-)))))

Noch eine Frage dazu: Eclipse unterstreicht es nun als Warnung mit dem Hinweis "deprecated". Ich interpretiere es als veraltet. Woher weiß ich nun was das "neuere" ist. Und welche negativen Folgen könnte das für meine App haben?

Antworten