我从其他活动中得到一个很长的值,并希望将其保存在sqlite中。
long fk;
fk = bundle.getLong("ab"); // value ab get from other activities
k.insertStaffBenefit(name,result,fk);
StaffAPI.java
public class StaffAPI {
private SQLiteDatabase database;
private MyDatabaseHelper dbHelper;
public String[] allColumns={MyDatabaseHelper.ID3, MyDatabaseHelper.Description,MyDatabaseHelper.Amount,MyDatabaseHelper.Twd_id};
public StaffAPI(Context context)
{
dbHelper=new MyDatabaseHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public long insertStaffBenefit(String description,String amount,long id)
{
database=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(MyDatabaseHelper.Description,description);
values.put(MyDatabaseHelper.Amount,amount);
values.put("Twd_id",id);
database.insert(MyDatabaseHelper.TABLE_STAFF_BENEFICT,null,values);
database.close();
return 0 ;
}
}
我知道我必须初始化a
,因为它可能指向null,但我该如何解决这个问题?
java.lang.NullPointerException:尝试调用虚拟方法' long com.example.project.project.API.StaffAPI.insertStaffBenefit(java.lang.String中, java.lang.String,long)'在空对象引用上
答案 0 :(得分:1)
a是long,而不是Long,所以它的默认值是0,而不是null。然后你可以看到方法的源代码getLong(“foreignKey”),method getLong(String key)
其默认值为0,其返回类型为long,而不是Long。 所以你不需要判断a是否为空。 错误不是a为null,而是调用insertStaffBenefit。
答案 1 :(得分:0)
我不认为您的错误来自NullPointerException
的{{1}}。 long
是原始数据类型,它具有默认值,您无法将long
值指定为:null
。不可能。因此,我建议您在分配之前检查long a = null
:
bundle.getLong("foreignKey")
修改:
从您的logcat,当您尝试从long a;
a= bundle.getLong("foreignKey") != null? bundle.getLong("foreignKey") : 0;
k.insertToDB(a);
对象(代码中的k)调用insertStaffBenefit
时,会发生错误。试着检查一下。