Nullpointer beim Löschen von Datenbankeintrag, je nachdem wo der Befehl steht

kuzdu

Aktives Mitglied
Hi Leute,

ich möchte einen Eintrag aus einer Tabelle löschen und der Löschbefehl funktioniert auch soweit, nur nicht "an der richtigen Stelle".

Wenn ich in der Main-Klasse alle Einträge mit folgendem Code auslese, funktioniert das Löschen.
Java:
try {
	    		datasource.open();
	    		RechnungenList = datasource.getAllEntries(entryForTable(forTable)); //Tabelle wird ausgelesen
	    		
	    		datasource.delete(11);  //löschen funktioniert		
	    		datasource.close();
	    	}

Nun kann ich die einzelnen Einträge anklicken und ein neues Intent (aufbauend auf der Klasse ReadSimpleEntry) wird geöffnet. Dort wird der einzelne Eintrag komplett mit allen Details ausgegeben und ebenfalls existiert ein Löschen Button.
Java:
try{
datasource.open();
        	//	datasource.delete(id);  
        	//	datasource.delete(11); 
        	//	ke.deleteEntry(id); 
                //      ke.deleteEntry(11);
datasource.close();
        	} catch(Exception ex) {
        		System.out.println(ex);
        	}
Diese vier Varianten werfen alle eine Nullpointer-Exception. An der Id liegt es also nicht. Das ke.deleteEntry(id) ist nur für Testzwecke. Es ist eine Methode in der Main-Klasse, die wieder datasource.delete aufruft.

Was ich nicht verstehe, warum funktioniert die erste Variante des Löschens und die zweite nicht?

Anscheinend kann mein Programm bei der zweiten nicht auf die Tabelle zugreifen, versucht trotzdem die Id 11 zu löschen und wirft eine Nullpointer-Exception. Nur wie behebe ich das?

Ich bin mir fast sicher, dass das zu den Basics von Java gehört, aber iwie kriege ich keine Lösung hin. Freue mich über Code-Hilfe oder hilfreiche Google-Schlagworte. :)

Schönen Sonntag noch :)

PS: Falls mehr Code benötigt wird, einfach Bescheid geben.
 
Zuletzt bearbeitet:

schlingel

Gesperrter Benutzer
Also wo fliegt die Exception?

Bei ke.delete oder bei datasource.delete?

Falls sie beim ke fliegt, stellt sich die Frage ob du ke initialisiert bzw. instanziert hast. Falls sie datasource fliegt, poste mal die ganze Exception.
 

kuzdu

Aktives Mitglied
Nein, ich habe ke nicht initialisiert oder instanziert! Ich muss erst mal googlen, was das genau macht bzw. wie das geht.

Bei beiden kommt dieselbe Exception.
 

Bernd Hohmann

Top Contributor
Keine Ahnung welches Tool Du dort missbrauchst, aber die ID ist mit Sicherheit nur auf das Resultset bezogen.

Code:
SELECT * FROM BRÖTCHENKORB

könnte als Resultset bringen

Code:
1: Weizenbrötchen
2: Roggenbrötchen
3: Dinkelbrötchen

Da wäre also ein "datasource.delete(2)" möglich.

Wenn Du aber die Datasource nur aufmachst (via .open()) ohne eine Query durchzuführen, bringt auch ein .delete() nix.

Bernd
 

kuzdu

Aktives Mitglied
Neue Antwort:
Ich kann nicht sagen, was jetzt genau falsch war, aber nun funktioniert alles wie es sollte, mein Code zur Löschmethode sieht so aus:

Java:
 loeschen.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
      	   
        	 
        	 
        	try{
        		datasource.open();
        		datasource.delete(id);
                 	datasource.close();
        	} catch(Exception ex) {
        		System.out.println(ex);
        	}

Meine alte Antwort:
Hi, bin jetzt erst dazu gekommen zu antworten.

Keine Ahnung welches Tool Du dort missbrauchst, aber die ID ist mit Sicherheit nur auf das Resultset bezogen.

Ich missbrauche eign. gar kein Tool, sondern die ganz normale SQLite-Klasse. Hier rufe ich ja nur eine Löschmethode auf, die dann in einer weiteren Klasse das eigentliche Löschen durchführt:

Java:
//Klasse: EntryDatabase       - ein etwas ungünstiger Name im Nachhinein :)
//Diese Methode funktioniert
public void delete(int id) {
	
		String table = "KALENDERZWEI";
		String whereClause = "id = "+id;  
		String[] whereArgs = null;
		
		database.delete(table, whereClause, whereArgs);
	}


Also in der Main-Klasse initalisiere ich die Datenbank wie folgt:

Java:
public class Main extends Activity {

 private EntryDatabase datasource;

public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.entry);

datasource = new EntryDatabase(this);


//Daten auslesen
try {
	    		datasource.open();
	    		//datasource.delete(18); //hier funktioniert das Löschen, aber hier brauch ich es nicht
	    		RechnungenList = datasource.getAllEntries(entryForTable(forTable)); //Hier werden Tabelleneinträge ausgelesen und in eine Liste gepackt zur besseren Ansicht
	    		datasource.close();
}


//Per Klick auf einen Eintrag, werden die Daten weiter an den nächsten Intent übergeben
lVerlauf.setOnItemClickListener(new OnItemClickListener()
		      {
		  
		      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
		      {
		      Intent intent = new Intent();
		      intent.setClassName(getPackageName(), getPackageName()+".ReadSimpleEntryClass");
		      
		      Bundle anReadSimpleEntry = new Bundle();
		      
		      anReadSimpleEntry.putInt("ID",RechnungenList.get(arg2).getId());
		      anReadSimpleEntry.putString("Eintrag",RechnungenList.get(arg2).getEntry().toString());
		      anReadSimpleEntry.putString("Alarm",RechnungenList.get(arg2).getAlarm().toString());
		     	
		      intent.putExtras(anReadSimpleEntry);
		      startActivity(intent);
		      }
		  });
}

//Hier die Löschmethode, die auf die Klasse VerwaltungDB zugreift
  public void deleteEntry(int id) {
		 // datasource.delete(id); //Nullpointer
		  datasource.open();
		  datasource.delete(11); //Nullpointer
		  datasource.close();
	  }

Java:
public class ReadSimpleEntry extends Activity {

 private EntryDatabase datasource;
   private Kalenderentry ke;


public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.read_simple_entry);
	

 datasource = new EntryDatabase(this);
 ke = new Kalenderentry();   //Das hier habe ich neu eingefügt 'einfach mal so', hat aber auch nichts gebracht

 loeschen.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
      	  
        	 
        	try{
        		datasource.open();
        		
        		ke.deleteEntry(20);     //Die Löschmethode über die Main-Klasse 
        		datasource.delete(20); //bzw. das Löschen von der ReadSimpleEntry-Klasse bringt nichts anderes 
                                                        //als eine Nullpointer

            	datasource.close();
        	} catch(Exception ex) {
        		System.out.println(ex);
        	}


Kann es vielleicht sein, dass ich einmal in der Main-Klasse und in der ReadSimpleEntry-Klasse durch das datasource = new EntryDatabase(this); unterschiedliche Objekt der Datenbankklasse erzeuge und deshalb die Löschmethode nullpointermäßig ins Leere geht? Wenn ja, wie behebe ich das?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Android Nullpointer Exception bei Methodenaufruf durch MainActivity Android & Cross-Platform Mobile Apps 3
H Nullpointer Exception im BaseAdapter Android & Cross-Platform Mobile Apps 7
R Android Löschfunktion beim Wischen Android & Cross-Platform Mobile Apps 10
W Rand ändern beim ImageView bei Picasso Android & Cross-Platform Mobile Apps 1
Arif Android Android Studio: Fehler beim Einbinden fremder Bibliothek? Android & Cross-Platform Mobile Apps 2
L App stürtzt ab beim öffnen Android & Cross-Platform Mobile Apps 1
JavaWolf165 Android Fehler beim Speichern/Downloaden einer Datei Android & Cross-Platform Mobile Apps 2
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
M Android Fehler beim Parsen. Android & Cross-Platform Mobile Apps 29
V Android Fehlermeldung beim Öffnen von Eclipse nach Installation der Android Erweiterung Android & Cross-Platform Mobile Apps 4
M Error beim drücken der Zurück-Taste am Handy Android & Cross-Platform Mobile Apps 2
S Fehler beim Textdatei einlesen!? Android & Cross-Platform Mobile Apps 7
A Fehlermeldung beim ändern der ViewGroup. Android & Cross-Platform Mobile Apps 6
H Buttons färben sich mit, beim Hintergrund ändern Android & Cross-Platform Mobile Apps 3
A Mehrere Fehler beim Compilieren Android & Cross-Platform Mobile Apps 4
G Problem beim Rendern von 3D-Objekt Android & Cross-Platform Mobile Apps 0
L Android OutOfMemory beim erneuten Starten der App Android & Cross-Platform Mobile Apps 2
N Android Retain Dialog verschwindet beim drehen Android & Cross-Platform Mobile Apps 4
B Android GameLoopThread stürzt beim 2ten start der App ab? Android & Cross-Platform Mobile Apps 4
S Java ME Exception beim Abspielen von Musik Android & Cross-Platform Mobile Apps 6
G Fehler beim Import "Invalid project description" Android & Cross-Platform Mobile Apps 2
G unterschiedliches Verhalten beim Installieren des App auf dem Smartphone Android & Cross-Platform Mobile Apps 3
K Android schwarzer Bildschirm beim Rendern von Text und Dreiecken Android & Cross-Platform Mobile Apps 9
DaniSahne96 Problem beim Appdebuggen auf Smartphone Android & Cross-Platform Mobile Apps 3
P Android Problem beim Widget - Denkfehler ? Android & Cross-Platform Mobile Apps 2
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
J Android Verhalten beim Hinzufügen neuer Views? Android & Cross-Platform Mobile Apps 6
S Android Fehler beim Anzeigen meines Apps auf Galaxy Tab Android & Cross-Platform Mobile Apps 4
G Beziehung von THIS beim Imageadapter und AsyncTask Android & Cross-Platform Mobile Apps 7
V [Java] und [JavaME] ClientServer StreamConnection . Problem beim lesen / schreiben Android & Cross-Platform Mobile Apps 2
R Ein Problem beim ausführen von folgendem Quelltext Android & Cross-Platform Mobile Apps 11
N Error in HTTP operation beim KXML parsen Android & Cross-Platform Mobile Apps 7
A Problem beim Subtrahieren eines Double von einem Double Android & Cross-Platform Mobile Apps 5
G fehldermeldung beim klicken auf "build" Android & Cross-Platform Mobile Apps 8
L SecurityException beim lesen/schreiben eine Datei Android & Cross-Platform Mobile Apps 7
F Problem beim Erstellen der Jar File Android & Cross-Platform Mobile Apps 4
S createPlayer beim Entwickeln Android & Cross-Platform Mobile Apps 6
L Android ListView swipe zum löschen Android & Cross-Platform Mobile Apps 1
K Löschen einer Tabelle bei PlayStore update Android & Cross-Platform Mobile Apps 2
N Android Display nicht löschen bzw. neu laden Android & Cross-Platform Mobile Apps 2
A Android Eine Datei in Android löschen, aber wie ? Android & Cross-Platform Mobile Apps 24
A Leichen löschen Android & Cross-Platform Mobile Apps 6
N Zeichen im String löschen? Android & Cross-Platform Mobile Apps 18

Ähnliche Java Themen

Neue Themen


Oben