Momentan arbeite ich mit einer Listenansicht, die Listenansicht enthält drei Werte, ID, Titel und Beschreibung. HierAusgewähltes Listenansichtselement, das einen Nullobjekt-Referenzfehler angibt
ist die XML für die Listenansicht ..
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/Ln"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:scrollbars="horizontal"
android:weightSum="4" >
<TextView
android:id="@+id/txtNoteID"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.39"
android:gravity="center"
android:text="0"
android:textSize="20sp" />
<TextView
android:id="@+id/txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:text="Pub" />
</LinearLayout>
<TextView
android:id="@+id/txtDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="20sp"
android:text="PubTest" />
</LinearLayout>
Die Liste mit Daten aus einer Datenbank gefüllt wird, und alles funktioniert bis zu diesem Punkt. Allerdings muss ich in der Lage sein, Elemente aus der Datenbank zu löschen. Ich dachte, ein Kontextmenü zu haben, wenn ein Element angeklickt wird, wäre am einfachsten, da der Benutzer das Element auswählen kann, das gelöscht werden soll. ich erhalte jedoch diesen Fehler
"java.lang.NullPointerException: Der Versuch, virtuelle Methode 'java.lang.CharSequence android.widget.TextView.getText()' auf null Objektverweis aufrufen"
Dies ist das Kontextmenü Code löschen ...
public boolean onContextItemSelected(MenuItem item)
{
//AdapterView.AdapterContextMenuInfo Info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.DeleteItem: {
DB = new DBController(getApplicationContext());
SQLiteDatabase db = DB.getWritableDatabase();
db.delete("NOTES", "ID=" + NoteID.getText().toString(), null);
Toast.makeText(StoredNoteList.this, "deleted successfully", Toast.LENGTH_SHORT).show();
Adapter.notifyDataSetChanged();
return true;
}
}
ich ziemlich sicher bin, dass das Problem mit dem (NoteID.getText ist) toString() -. Meine Theorie ist, dass, wenn ich wählen etwas von der Liste, das es em ID ausgewählt Wird nicht in der NoteID Variable gespeichert, dies ist jedoch nur eine Theorie.
Für diejenigen, die für die NoteID fragte Deklarieren und Zuweisen der NoteID
TextView NoteID,NoteTitle,NoteDesc;
NoteID=(TextView)findViewById(R.id.txtNoteID);
Nach einigen Änderungen ich jetzt sehe, dass meine NoteID definitiv null ist
public boolean onContextItemSelected(MenuItem item)
{
//AdapterView.AdapterContextMenuInfo Info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
NoteList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ID =((TextView)parent.findViewById(R.id.txtNoteID)).getText().toString();
}
});
switch (item.getItemId())
{
case R.id.DeleteItem:
{
DB = new DBController(getApplicationContext());
SQLiteDatabase db = DB.getWritableDatabase();
db.delete("NOTES", "ID=" + ID, null);
Toast.makeText(StoredNoteList.this,"deleted successfully", Toast.LENGTH_SHORT).show();
Adapter.notifyDataSetChanged();
return true;
}
Der Debugger zeigt mir NoteID ist Ich denke, sobald ich einen Weg gefunden habe, die ausgewählte ID aus der Artikelliste in die NoteID-Variable zu speichern, sollte meine App problemlos funktionieren.
Hier ist mein Adapter-Code für jeden, der interessiert sind
Adapter = new SimpleAdapter(StoredNoteList.this, Data, R.layout.rows,new String[]{"ID","TITLE","DESCRIPTION"}, new int[]{R.id.txtNoteID,R.id.txtTitle,R.id.txtDesc});
NoteList.setAdapter(Adapter);
Jede Hilfe würde geschätzt, Dank
Können Sie den Code anzeigen, in dem die Variable '' NoteID'' erstellt wird? Eine vollständige Stapelverfolgung wäre ebenfalls hilfreich. – Kamil
Bitte beachten Sie, dass Variablen mit Kleinbuchstaben beginnen sollten. Es ist eine Java-Codierungskonvention –