初始化ContentValue以使其不保持为空?

时间:2015-04-06 02:16:59

标签: java android

我需要一个函数来替换或添加单个条目到ContentValue。我尚未测试名义上的情况但是当bUpdatedFields为null时,我收到错误:

  

"尝试调用虚方法' void   android.content.ContentValues.put(java.lang.String,java.lang.String)'   在null对象引用"

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;
    }

调用类(User)扩展了TableObject,顺便提一下,作为substituteBundleStringValue的输入发送的ContentValues是bUpdatedFields,它在TableObject中声明。

我应该初始化bUpdatedFields吗?如果是这样,怎么样?

调用方法是:

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

1 个答案:

答案 0 :(得分:0)

传递给方法的bundle(类型为ContentValues)值为null。对bundle进行的null检查只会阻止bundle.remove(key)语句在bundle为null时运行。通过查看您编辑的答案,您似乎正在传递bUpdatedFields并将其分配给相同方法的结果。

但在传递bUpdatedFields之前,需要对其进行初始化。在该行:

bUpdatedFields = substituteBundleStringValue(bUpdatedFields, FIELD_NAME, name);

bUpdatedFields显然为null(这是从您看到的错误中推断出来的)。您是否在调用上述代码行之前初始化了bUpdatedfields?我的意思是,你在某个地方有一条线:

bUpdatedFields = new ContentValues(); // initializing

我的猜测是,要么你没有初始化这个并且你没有上面的代码行,要么你确实拥有它,在调用那行之前它没有被调用。