2015-04-06 26 views
0

我需要一個函數來替代或添加單個條目到ContentValue。我沒有測試過額定情況尚未但當bUpdatedFields是空的,我得到的錯誤:初始化ContentValue使其不保留爲空?

"Attempt to invoke virtual method 'void android.content.ContentValues.put(java.lang.String, java.lang.String)' on a null object reference"

public abstract class TableObject implements BaseColumns { 

public TableObject() { 
} 

public ContentValues bUpdatedFields; 

public ContentValues substituteBundleStringValue (ContentValues bundle, String key, String value){ 
     if (bundle!=null && bundle.containsKey(key)) bundle.remove(key); 
     bundle.put(key, value); 
     return bundle; 
    } 

調用的類(用戶)擴展TableObject和,順便說一句,這被作爲輸入的ContentValues substituteBundleStringValue是bUpdatedFields,它在TableObject中聲明。

我應該初始化bUpdatedFields嗎?如果是這樣,怎麼樣?

調用的方法是:

public void setName(String name) { 
     Name = name; 
     bUpdatedFields = substituteBundleStringValue(bUpdatedFields, FIELD_NAME, name); 
    } 
+0

顯示調用'substituteBundleStringValue'方法的代碼 – 2015-04-06 02:19:12

回答

0

的要傳遞給方法的值(的類型ContentValues)束爲空。您爲捆綁軟件執行的空檢查只會阻止bundle.remove(key)語句在捆綁軟件爲空時運行。從查看你編輯的答案,看起來你正在傳遞bUpdatedFields並將其分配給相同方法的結果。

但是在你傳遞bUpdatedFields之前,你需要初始化它。在該行中:

bUpdatedFields = substituteBundleStringValue(bUpdatedFields, FIELD_NAME, name); 

bUpdatedFields顯然是空的(這是從您看到的錯誤推斷出來的)。在調用上述代碼行之前,您是否初始化了bUpdatedfields?我的意思是,你有一條線的地方是:

bUpdatedFields = new ContentValues(); // initializing 

我的猜測是,要麼你還沒有初始化,這和你沒有上面的代碼行,或者如果你有它,它沒有被在你呼叫該線路之前呼叫。

+0

實際上,我想要替換當前值,如果有的話。否則,我想要把新的。我添加了空檢查,因爲我不想讓containsKey方法偶然發現空包。 – 2015-04-06 02:39:13

+0

好的..你有沒有初始化bUpdatedFields在任何地方?請看我編輯的答案,並讓我知道如果這回答你的問題 – ucsunil 2015-04-06 06:28:21