删除行后,SQLite数据库无法正确更新

时间:2014-07-06 22:40:16

标签: android sqlite android-listview

当我删除任何数据时,listitem click会在打开listitem时显示错误,并且自定义列表视图上的数据也不正确。删除第0行后数据未正确更新。请帮忙..

    mydb = new DBHelper(this);

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        int Value = extras.getInt("id");
        if (Value > 0) {
            // means this is the view part not the add contact part.
            Cursor crs = mydb.getData(Value);
            id_To_Update = Value;
            crs.moveToFirst();
            String nam = crs.getString(crs.getColumnIndex(DBHelper.C_NAME));
            String phon = crs.getString(crs
                    .getColumnIndex(DBHelper.C_PHONE));
            String addr = crs.getString(crs
                    .getColumnIndex(DBHelper.C_ADDRESS));
            String dat = crs.getString(crs.getColumnIndex(DBHelper.C_DATE));
            String typ = crs.getString(crs.getColumnIndex(DBHelper.C_TYPE));
            if (!crs.isClosed()) {
                crs.close();
            }
            Button b = (Button) findViewById(R.id.button1);
            b.setVisibility(View.INVISIBLE);

            name.setText((CharSequence) nam);
            name.setFocusable(false);
            name.setClickable(false);

            phone.setText((CharSequence) phon);
            phone.setFocusable(false);
            phone.setClickable(false);

            type.setText((CharSequence) typ);
            type.setFocusable(false);
            type.setClickable(false);

            address.setText((CharSequence) addr);
            address.setFocusable(false);
            address.setClickable(false);

            date.setText((CharSequence) dat);
            date.setFocusable(false);
            date.setClickable(false);
        }
    }
}



    case R.id.Delete_Contact:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(R.string.deleteContact)
                .setPositiveButton(R.string.yes,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                mydb.deleteContact(id_To_Update);
                                Toast.makeText(getApplicationContext(),
                                        "Deleted Successfully",
                                        Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(
                                        getApplicationContext(),
                                        com.example.addressbook.MainActivity.class);
                                startActivity(intent);
                            }
                        })
                .setNegativeButton(R.string.no,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int id) {
                                // User cancelled the dialog
                            }
                        });
        AlertDialog d = builder.create();
        d.setTitle("Are you sure");
        d.show();

        return true;
    default:
        return super.onOptionsItemSelected(item);

    }
}

public void run(View view) {
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        int Value = extras.getInt("id");
        if (Value > 0) {
            if (mydb.updateContact(id_To_Update, name.getText().toString(),
                    phone.getText().toString(), type.getText().toString(),
                    address.getText().toString(), date.getText().toString())) {
                Toast.makeText(getApplicationContext(), "Updated",
                        Toast.LENGTH_SHORT).show();
                Intent intent = new Intent(getApplicationContext(),
                        com.example.addressbook.MainActivity.class);
                startActivity(intent);
            } else {
                Toast.makeText(getApplicationContext(), "not Updated",
                        Toast.LENGTH_SHORT).show();
            }
        } else {
            if (mydb.insertContact(name.getText().toString(), phone
                    .getText().toString(), type.getText().toString(),
                    address.getText().toString(), date.getText().toString())) {
                Toast.makeText(getApplicationContext(), "done",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(), "not done",
                        Toast.LENGTH_SHORT).show();
            }
            Intent intent = new Intent(getApplicationContext(),
                    com.example.addressbook.MainActivity.class);
            startActivity(intent);
        }

DBHelper.java

public Integer deleteContact(Integer id) {
    SQLiteDatabase db = this.getWritableDatabase();
    return db.delete("contacts", "id = ? ",
            new String[] { Integer.toString(id) });
}

}

1 个答案:

答案 0 :(得分:0)

最后我得到了解决方案。我在自定义列表视图中有一个文本视图,其中Table ID对于每一行都是唯一的,删除行后它的值不会改变,所以我在不同的活动中打开该行的数据。