我需要一个函数来替换或添加单个条目到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);
}
答案 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
我的猜测是,要么你没有初始化这个并且你没有上面的代码行,要么你确实拥有它,在调用那行之前它没有被调用。