初始化从其他 activity 获得的 long 值

Initialize long value which was get from other activity

我从其他 activity 那里得到了一个 long 值,想将它保存在 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: Attempt to invoke virtual method 'long com.example.project.project.API.StaffAPI.insertStaffBenefit(java.lang.String, java.lang.String, long)' on a null object reference

我不认为你的错误来自 NullPointerException of longlong 是原始数据类型,它有默认值,您不能将 null 值分配给它,如:long a = null。不可能。因此,我建议您在分配之前检查您的bundle.getLong("foreignKey")

long a;
a= bundle.getLong("foreignKey") != null? bundle.getLong("foreignKey") : 0; 
k.insertToDB(a);

编辑:
在您的 logcat 中,当您尝试从 null 对象(代码中的 k)调用 insertStaffBenefit 时发生错误。试试看。

a是long,不是Long,所以它的默认值为0,不是null。然后可以看方法getLong("foreignKey"),method getLong(String key)

的源码

它的默认值为0,它的return种类是long,不是Long。 所以你不需要判断a是否为null。 错误不是 a 为空,而是调用 insertStaffBenefit。