我正在尝试设置一个删除按钮以从表中删除客户,客户使用回收器视图显示在卡片视图中,因此每个客户都有自己的删除按钮,客户信息使用文本视图显示。我需要将客户 ID 传递给 delete 方法,以便在表中搜索要删除的特定 ID。我如何成功传递数据?
这是我目前必须尝试传递我需要的数据
public void onBindViewHolder(@NonNull MyHolder holder, final int position) {
holder.idText.setText(String.valueOf(id.get(position)));
holder.nameText.setText(String.valueOf(name.get(position)));
holder.surnameText.setText(String.valueOf(surname.get(position)));
holder.add1Text.setText(String.valueOf(add1.get(position)));
holder.add2Text.setText(String.valueOf(add2.get(position)));
holder.add3Text.setText(String.valueOf(add3.get(position)));
holder.postCodeText.setText(String.valueOf(postCode.get(position)));
holder.phoneNumberText.setText(String.valueOf(phoneNumber.get(position)));
holder.emailText.setText(String.valueOf(email.get(position)));
GlobalVars.id = holder.idText.getText().toString();
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
db.deleteCustomer(GlobalVars.id);
}
});
}
这是我的删除方法
public long deleteCustomer(String id)
{
SQLiteDatabase db = this.getWriteableDatabase();
ContentValues idValue = new ContentValues();
idValue.put(CUSTOMER_ID, id);
return db.delete(TABLE_NAME, "where Customer_ID = " + idValue, null);
}
当我运行应用程序时,它会显示客户和按钮,但是当我单击任何按钮时,我会看到一个空白屏幕,然后它会返回到我的登录屏幕。
这些是出现在 logcat 中的错误
2021-05-01 12:16:26.212 18729-18729/com.example.rowlandsflooringapp E/Zygote: isWhitelistProcess - 进程被列入白名单 2021-05-01 12:16:26.212 18729/Zflooringappe/Zygote :accessInfo:1 2021-05-01 12:16:26.244 18729-18729/com.example.rowlandsflooringapp E/andsflooringap:runtime_flags 中设置的未知位:0x8000 2021-05-01: 15872196/15872196 example.rowlandsflooringapp E/AndroidRuntime:致命异常:主进程:com.example.rowlandsflooringapp,PID:18729 java.lang.NullPointerException:尝试调用虚拟方法'java.io.File android.content.Context.getDatabasePath(java.lang .String)' 在 android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:445) at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:415) 在 com.example.rowlandsflooringapp.CustomerDB.deleteCustomer(CustomerDB.java:70) 在 com.example.rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) 在 android.view.View.performClick(View.java: 7862) 在 android.widget.TextView.performClick(TextView.java:15004) 在 android.view.View.performClickInternal(View.java:7831) 在 android.view.View.access$3600(View.java:879) 在 android .view.View$PerformClick.run(View.java:29359) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os。 Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$ MethodAndArgsCaller.run(RuntimeInit.java:496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)1100)1100)example.rowlandsflooringapp.CustomerDB.deleteCustomer(CustomerDB.java:70) at com.example.rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android。 widget.TextView.performClick(TextView.java:15004) at android.view.View.performClickInternal(View.java:7831) at android.view.View.access$3600(View.java:879) at android.view.View$ PerformClick.run(View.java:29359) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper) .java:237) 在 android.app.ActivityThread.main(ActivityThread.java:8167) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit .java:496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)example.rowlandsflooringapp.CustomerDB.deleteCustomer(CustomerDB.java:70) at com.example.rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android。 widget.TextView.performClick(TextView.java:15004) at android.view.View.performClickInternal(View.java:7831) at android.view.View.access$3600(View.java:879) at android.view.View$ PerformClick.run(View.java:29359) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper) .java:237) 在 android.app.ActivityThread.main(ActivityThread.java:8167) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit .java:496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)rowlandsflooringapp.CustomerDB.deleteCustomer(CustomerDB.java:70) at com.example.rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android.widget。 TextView.performClick(TextView.java:15004) at android.view.View.performClickInternal(View.java:7831) at android.view.View.access$3600(View.java:879) at android.view.View$PerformClick。运行(View.java:29359) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java) :237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java) :496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)rowlandsflooringapp.CustomerDB.deleteCustomer(CustomerDB.java:70) at com.example.rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android.widget。 TextView.performClick(TextView.java:15004) at android.view.View.performClickInternal(View.java:7831) at android.view.View.access$3600(View.java:879) at android.view.View$PerformClick。运行(View.java:29359) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java) :237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java) :496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)deleteCustomer(CustomerDB.java:70) at com.example.rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android.widget.TextView.performClick( TextView.java:15004) 在 android.view.View.performClickInternal(View.java:7831) 在 android.view.View.access$3600(View.java:879) 在 android.view.View$PerformClick.run(View. java:29359) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:237) 在android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)deleteCustomer(CustomerDB.java:70) at com.example.rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android.widget.TextView.performClick( TextView.java:15004) 在 android.view.View.performClickInternal(View.java:7831) 在 android.view.View.access$3600(View.java:879) 在 android.view.View$PerformClick.run(View. java:29359) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:237) 在android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android.widget.TextView.performClick(TextView.java:15004) at android.view.View。 performClickInternal(View.java:7831) at android.view.View.access$3600(View.java:879) at android.view.View$PerformClick.run(View.java:29359) at android.os.Handler.handleCallback( Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:237) 在 android.app.ActivityThread.main(ActivityThread.java:8167) ) 在 java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit) .java:1100)rowlandsflooringapp.CustomerAdapter$1.onClick(CustomerAdapter.java:73) at android.view.View.performClick(View.java:7862) at android.widget.TextView.performClick(TextView.java:15004) at android.view.View。 performClickInternal(View.java:7831) at android.view.View.access$3600(View.java:879) at android.view.View$PerformClick.run(View.java:29359) at android.os.Handler.handleCallback( Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:237) 在 android.app.ActivityThread.main(ActivityThread.java:8167) ) 在 java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit) .java:1100)performClick(View.java:7862) at android.widget.TextView.performClick(TextView.java:15004) at android.view.View.performClickInternal(View.java:7831) at android.view.View.access$3600(View. java:879) 在 android.view.View$PerformClick.run(View.java:29359) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) ) 在 android.os.Looper.loop(Looper.java:237) 在 android.app.ActivityThread.main(ActivityThread.java:8167) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android。 internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)performClick(View.java:7862) at android.widget.TextView.performClick(TextView.java:15004) at android.view.View.performClickInternal(View.java:7831) at android.view.View.access$3600(View. java:879) 在 android.view.View$PerformClick.run(View.java:29359) 在 android.os.Handler.handleCallback(Handler.java:883) 在 android.os.Handler.dispatchMessage(Handler.java:100) ) 在 android.os.Looper.loop(Looper.java:237) 在 android.app.ActivityThread.main(ActivityThread.java:8167) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android。 internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)view.View$PerformClick.run(View.java:29359) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper .loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller .run(RuntimeInit.java:496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)view.View$PerformClick.run(View.java:29359) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper .loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller .run(RuntimeInit.java:496) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
因此,经过多次尝试但失败后,我决定再次从头开始创建删除方法,这就是我最终得到的结果,并且效果很好。
数据库助手中的删除方法
void deleteOneRow(String row_id){
SQLiteDatabase db = this.getWritableDatabase();
long result = db.delete(TABLE_NAME, "_id=?", new String[]{row_id});
if(result == -1){
Toast.makeText(context, "Failed to Delete.", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Successfully Deleted.", Toast.LENGTH_SHORT).show();
}
调用删除方法
void confirmDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Delete " + name + " ?");
builder.setMessage("Are you sure you want to delete " + name + " ?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
MyDatabaseHelper myDB = new MyDatabaseHelper(UpdateActivity.this);
myDB.deleteOneRow(id);
finish();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.create().show();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句