【发布时间】:2018-08-26 06:15:06
【问题描述】:
在过去的几天里,我查看了大量类似的主题,但似乎没有一个对我的实际情况有所帮助,或者这只是我的经验不足。
我有一个执行 CRUD 操作的简单应用程序。我可以成功地在表中输入新行并删除它们,但是我的更新代码有问题,我找不到原因。让我感到困惑的是,它曾经工作过一次,然后无论我是创建新条目还是完全删除数据库并重新开始,都再也没有工作过。隔离一下我认为相关代码的操作流程如下。
单个项目位于 RecyclerView 中,并从内部类发送到要编辑和更新的活动:
public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) {
final String contactName = mCursor.getString(mCursor.getColumnIndex(ContactEntry.COLUMN_NAME));
final int contactNumber = mCursor.getInt(mCursor.getColumnIndex(ContactEntry.COLUMN_PHONE_NUMBER));
final String contactMail = mCursor.getString(mCursor.getColumnIndex(ContactEntry.COLUMN_EMAIL));
final int currentPosition = position;
holder.mEditContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, ContactUpdate.class);
intent.putExtra(CONTACT_POSITION, currentPosition);
intent.putExtra(EXTRA_NAME, contactName);
intent.putExtra(EXTRA_PHONE, contactNumber);
intent.putExtra(EXTRA_MAIL, contactMail);
mContext.startActivity(intent);
}
});
然后我将它们放入检索类并将值组织到适当的 EditText 视图中。我确信有一种更有效的方法,但我仍在学习:
Intent intent = getIntent();
mPosition = intent.getIntExtra(ContactRecyclerAdapter.CONTACT_POSITION, 0);
mContactName = intent.getStringExtra(ContactRecyclerAdapter.EXTRA_NAME);
mContactPhone = intent.getIntExtra(ContactRecyclerAdapter.EXTRA_PHONE, 0);
mContactMail = intent.getStringExtra(ContactRecyclerAdapter.EXTRA_MAIL);
mUpdateName.setText(mContactName);
mUpdatePhone.setText("" + mContactPhone);
mUpdateMail.setText(mContactMail);
最后我更新行的方法:
private void updateData() {
String name = mUpdateName.getText().toString();
String getPhone = mUpdatePhone.getText().toString();
int phone = Integer.parseInt(getPhone);
String mail = mUpdateMail.getText().toString();
SQLiteDatabase db = new ContactOpenHelper(this).getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ContactEntry._ID, mPosition);
values.put(ContactEntry.COLUMN_NAME, name);
values.put(ContactEntry.COLUMN_PHONE_NUMBER, phone);
values.put(ContactEntry.COLUMN_EMAIL, mail);
String selection = ContactEntry._ID + " LIKE ?";
String[] selectionArgs = { String.valueOf(mPosition)};
db.update(ContactEntry.TABLE_NAME, values, selection, selectionArgs);
db.close();
startActivity(new Intent(this, ContactList.class));
}
正在发生的事情是该行没有被更新。目前我输入了三个模拟条目。我在update() 行设置了一个断点,试图找出发生了什么。此条目的原始名称是“ted”,它是列表中的第三个。如果我编辑 EditText 字段并运行 updateData() 方法,当断点被击中时,它会正确显示编辑的值以及 2 的正确位置。但是数据库实际上并没有更新。我显然误解了这里的工作原理。
为避免臃肿,我只包含了我认为相关的内容,但如果需要更多信息,我很乐意添加。
最后,这是调试器在断点处的屏幕截图,显示了我认为正确的信息以及我完全困惑为什么它不工作的地方(我在末尾添加了一堆 g名称“ted”只是为了测试它是否有效)。
【问题讨论】: