Редактировать элементы в списке

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

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

Это мой 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);
    }

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий

Вместо команды 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);
}

Отлично, рад, что помогло.

Yugansh Tyagi 18.06.2019 13:13

Другие вопросы по теме