2015-04-06 29 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