在我们正在组合的应用程序中,我正在尝试更新来自不同活动的行,但它会抛出错误或不更新任何内容,因为一旦我从一个活动移动到下一个活动,我似乎无法获得当前的rowId。任何想法都会很棒。
这来自活动:
Cursor value;
db.open();
long rowId = value.getLong(value.getColumnIndex("_id"));
boolean id = db.updateA(rowId, a1, a2, a3, a4);
db.close();
如果我设置“rowId = 1”,它会更新该行,但我想获得刚刚在不同活动中创建的行。
这是在DBHelper文件中:
public boolean updateA(long rowId, String a1,String a2, String a3, String a4) {
ContentValues args = new ContentValues();
args.put(C_A1, a1);
args.put(KEY_A2, a2);
args.put(KEY_A3, a3);
args.put(KEY_A4, a4);
return db.update(TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
答案 0 :(得分:0)
如果您需要更新记录,我建议在创建时将记录存储在内存中的数据对象中,并将其传递给需要进行更新的其他Activity。数据对象应该具有自己的ID属性,因此您可以使用它。
没有对您需要更新的记录的引用将是一场灾难。此外,如果您知道您总是需要更新记录,为什么不在插入时执行此操作?
答案 1 :(得分:0)
我不明白。
您有一个活动A,它可以打开数据库,更新行并关闭数据库。这是在SQLiteOpenHelper类的帮助下完成的。
现在你转到活动B,现在是什么?将你的主键(你知道它,你用它A)和putExtra发布到B(或者只是把整行放到B)。如果将rowid放到B,则可以打开,重新读取行,根据需要进行更新,然后再次关闭。如果你只是将整行放到B,那么你需要做的就是 - 但我不喜欢这样(例如,如果B崩溃会发生什么?)。
如果你在两个活动中都更新了两个活动所做的事情(并且没有重新阅读行),那么你的结果就是纯粹的运气。
答案 2 :(得分:0)
试试这个:
return db.update(TABLE, args, KEY_ROWID + "='" + rowId + "'", null)