初始化从其他活动获得的长值

时间:2015-11-05 02:38:52

标签: java android sqlite bundle long-integer

我从其他活动中得到一个很长的值,并希望将其保存在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)'在空对象引用上

2 个答案:

答案 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时,会发生错误。试着检查一下。

相关问题