2012-04-07 21 views
0

我試圖從一個活動把我的dbhelper實例到另一個活動傳遞對象在使用該代碼的使用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類實現Serializable

我歌廳困惑,可能有人點我的錯?

+2

我不確定你爲什麼想要做你想做的事但是要回答你的問題,一個新的'Intent'沒有任何'extras',所以'Bundle b = i.getExtras();'不會返回任何東西,即'b'將是'null'。如果你把它們放在那裏,一個'意圖'只有'額外'。只需使用'i.putExtra(「db」,db);'。 – Squonk 2012-04-07 19:29:55

回答

1

getExtras()返回null,因爲在調用它之前,您還沒有將任何額外內容放入Intent中。這意味着b == null,因此是NPE。只需將序列化直接放在意圖中即可。

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

但是,通常情況下,如果可以幫助它,請避免傳遞可序列化的意圖。

3

在將使用它的活動中創建dbhelper。如果你真的必須在活動之間傳遞它,將它存儲在一個靜態變量中很容易(在你的應用程序類中以方便訪問)

+0

我的錯誤是getextras而不是putextras,但這是重要的線索。爲什麼在每個活動中創建新的dbhelper會更好,而不是在它們之間傳遞相同的對象?附:我喜歡你的應用程序Kuffs :) – 2012-04-08 12:05:50

+2

這不是一個規則,但一般來說,一個活動對外部對象的依賴性越少,維護就越容易。想象一下,數據庫正在圍繞各種活動傳遞。如果一個活動決定關閉數據庫,其他人可能突然失敗,因爲他們期望數據庫可用並連接。 – Kuffs 2012-04-08 15:05:15