Редактировать элементы в списке - PullRequest
0 голосов
/ 17 июня 2019

Здравствуйте, я пытаюсь редактировать элементы в списке и базе данных.

Я попытался изменить имя и имя с идентификатором в методе Update в моем помощнике по базам данных, но это не работает

Это мой EditUser класс

public class EditUser extends AppCompatActivity {

    private Button bouton_modifier, bouton_supprimer;
    private EditText nom, prenom;

    DatabaseHelper mDatabaseHelper;
    private String selectedName,selectedFName,selectedID;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_user);
        bouton_modifier = (Button) findViewById(R.id.bouton_modifier);
        bouton_supprimer = (Button) findViewById(R.id.bouton_Supprimer);
        nom = (EditText) findViewById(R.id.nom);
        prenom = (EditText) findViewById(R.id.prenom);
        mDatabaseHelper = new DatabaseHelper(this);
        Intent receivedIntent = getIntent();

        selectedID = receivedIntent.getStringExtra("ID");
        selectedName = receivedIntent.getStringExtra("name");
        selectedFName = receivedIntent.getStringExtra("fname");

        nom.setText(selectedName);
        prenom.setText(selectedFName);

        bouton_modifier.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = nom.getText().toString();
                String Fname = prenom.getText().toString();
                if(!name.equals("") && !Fname.equals("")){
                    mDatabaseHelper.Update(name, Fname, selectedID, selectedName, selectedFName);
                    Intent intent = new Intent(EditUser.this, PageUser.class);
                    startActivity(intent);
                }else{
                    toastMessage("You must enter a name");
                }
            }
        });

а это мой DatabaseHelper класс

public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "users.db";
    public static final String TABLE_NAME = "users_data";
    public static final String COL1 = "ID";
    public static final String COL2 = "NAME";
    public static final String COL3 = "FNAME";


    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "NAME TEXT, FNAME TEXT)";
        db.execSQL(createTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public boolean addData(String Name, String FName) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COL2, Name);
        contentValues.put(COL3, FName);

        long result = db.insert(TABLE_NAME, null, contentValues);

        if (result == -1) {
            return false;
        } else {
            return true;
        }
    }
    public Cursor getListContents() {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor data = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
        return data;
    }

    public void Update(String newName, String newFName,String id, String oldName, String oldFName){
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "UPDATE " + TABLE_NAME + " SET " + COL2 + COL3 +
                " = '" + newName + newFName +"' WHERE " + COL1 + " = '" + id + "'" +
                " AND " + COL2 + COL3 + " = '" + oldName + oldFName + "'";
        db.execSQL(query);
    }

Я хотел бы изменить имя и имя, когда я нажму на кнопку «модификатор» и вернусь на страницу списка пользователей.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Вместо команды execSQL() попробуйте использовать команду update().

Метод update() принимает следующие аргументы

update(String table, ContentValues values, String whereClause, String[] whereArgs)

Поэтому измените метод Update в DatabaseHelper вот так -

public void Update(String newName, String newFName,String id, String oldName, String oldFName){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(COL2,newName);
    cv.put(COL3,newFName);
    String whereClause = COL1 + "=? AND " + COL2 + "=? AND " + COL3 + "=?";
    String[] args = new String[]{id, oldName,oldFName};
    db.update(TABLE_NAME,cv,whereClause,args);
}
0 голосов
/ 17 июня 2019

Я не знаю точно, что происходит, но ваш запрос на обновление кажется неправильным, вы должны сделать что-то вроде этого:

UPDATE table
SET column_1 = new_value_1,
    column_2 = new_value_2
WHERE
    search_condition 

Кроме того, это не проблема, но после редактирования яЯ думаю, что вы могли бы просто вызвать finish () вместо создания нового намерения, если только вы не удаляете PageUser из стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...