Android Sqlite插入空对象引用[重复]

Posted

技术标签:

【中文标题】Android Sqlite插入空对象引用[重复]【英文标题】:Android Sqlite insert null object reference [duplicate] 【发布时间】:2018-09-26 12:09:04 【问题描述】:

我正在介绍 android 编程课程,遇到一些添加到 sqlite 数据库的问题

任何可能导致此错误的建议。我认为这与没有正确分配 mDatabase 字段变量有关。

似乎问题在于 addCustomer 函数中的 mDatabase 变量需要不同的上下文。

  private static ContentValues getContentValues(Customer customer)  
     ContentValues values = new ContentValues(); 
     values.put(UUID, customer.getId().toString()); 
     values.put(FULL_NAME, customer.getName()); 
     values.put(ADDRESS, customer.getAddress()); 
     values.put(CREDIT_CARD_NUMBER, customer.getCreditCardNumber()); 
     values.put(EMAIL, customer.getEmail()); 
     values.put(SESSIONS_REMAINING, customer.getSessionsRemaining()); 
     values.put(PRINT_RECEIPT, customer.getPrintReceipt() ? 1 : 0); 
     values.put(EMAIL_RECEIPT, customer.getEmailReceipt() ? 1 : 0); 
     return values; 
  

 public void addCustomer(Customer c)  
    ContentValues values = getContentValues(c); 
    mDatabase.insert(CustomerDbSchema.CustomerTable.NAME, null, values); 
    Log.d("DATABASE", "Customer Added"); 
  

以下 Github 上的文件链接:

CustomerDataBase.java

CustomerCursorWrapper.java

CustomerDBSchema.java

Customer.java

AddCustomerActivity.java

【问题讨论】:

发布日志错误 java.lang.NullPointerException: 尝试调用虚拟方法 'long android.database.sqlite.SQLiteDatabase.insert(java.lang.String, java.lang.String, android.content.ContentValues)'在空对象引用上 【参考方案1】:

1) 我认为您没有正确使用SQLiteDatabase mDatabase = getWritableDatabase();。 2) 请参阅ContentValues 了解更多信息。 3) 使用if 确保已插入。

    if (mDatabase.insert(CustomerDbSchema.CustomerTable.NAME, null, contentValues) > 0) 
        return true;
    
    return false;

【讨论】:

以上是关于Android Sqlite插入空对象引用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

显示来自sqlite数据库的数据时“尝试在空对象引用上调用虚拟方法”[重复]

如何修复 Android Studio / SQLite 中的“空对象引用”错误? [复制]

Android:尝试在空对象引用[duplicate]上调用虚方法'void android.database.sqlite.SQLiteDatabase.execSQL(java.lang.

.getImage() 上的空对象引用 android [重复]

Android错误尝试在空对象引用上调用虚拟方法[重复]

什么错误尝试在空对象引用上调用虚拟方法'java.lang.String android.content.Context.getPackageName()'[重复]