2012-04-07 5 views
0

Ich versuche, meine dbhelper Instanz von einer Aktivität zur anderen diesen CodePassing Objekt über Aktivitäten mit putSerializable

private void onCategoriesClick() { 
     private DbAdapter db; 
     db = new DbAdapter(this); 
     Intent i = new Intent(this, CategoriesActivity.class); 
     Bundle b = i.getExtras(); 
     b.putSerializable("db", db); //geting NullPointerException here 
     startActivityForResult(i, 0);  

DbAdapter Klasse implementiert Serializable

ich verwirrt bin geting, könnte jemand Punkt mit zu übergeben mein Fehler?

+2

Ich bin mir nicht sicher, warum Sie das tun möchten, was Sie versuchen Um zu tun, aber um Ihre Frage zu beantworten, eine neue "Absicht" hat keine "Extras", so "Bundle b = i.getExtras();' wird nichts zurückgeben, dh, "b" wird "null". Eine "Absicht" hat nur "Extras", wenn Sie sie dort ablegen. Verwenden Sie einfach 'i.putExtra (" db ", db);'. – Squonk

Antwort

1

getExtras() gibt null zurück, weil Sie keine Extras in die Absicht eingefügt haben, bevor Sie sie aufrufen. Dies bedeutet, dass b == null, daher die NPE. Einfach die Serializable in die Absicht setzen.

i.putExtra("db", (Serializable) db); 

Im Allgemeinen vermeiden Sie jedoch, serializables über Intents zu übergeben, wenn Sie es helfen können.

3

Erstellen Sie das dbhelper in der Aktivität, die es verwenden wird. Wenn Sie es wirklich zwischen Aktivitäten übergeben müssen, wäre es viel einfacher, es in einer statischen Variablen zu speichern (in Ihrer Anwendungsklasse für einfachen Zugriff)

+0

Mein Fehler war zu getextras statt putextras aber das ist ein wichtiger Anhaltspunkt hier. Warum ist es besser, in jeder Aktivität ein neues dbhelper zu erstellen, anstatt dasselbe Objekt zwischen ihnen zu übergeben? P.S. Ich liebe Ihre App Kuffs :) –

+2

Es ist keine Regel, aber im Allgemeinen, je weniger Abhängigkeiten eine Aktivität auf externe Objekte hat, desto einfacher ist es zu pflegen. Stellen Sie sich eine Datenbank vor, die verschiedene Aktivitäten durchläuft. Wenn eine Aktivität beschließt, die Datenbank zu schließen, können die anderen plötzlich fehlschlagen, da sie erwartet haben, dass die Datenbank verfügbar und verbunden ist. – Kuffs

Verwandte Themen