Я создаю многоступенчатую форму в Android, используя SQLite db. Моя проблема в том, что я хочу обновить один столбец в имени пользователя (первичный ключ), но db дает мне две строки и нулевое значение.
имя пользователя ---------------- пароль -------------- active
myusername -------------- mypass --------------------- null
ноль ноль---------------------- --да
имя пользователя, пароль, fname, lname, active - мои столбцы в моей «пользовательской» таблице.
SqliteHelper.java
public boolean saveUser(String fname, String lname, String username, String password) {
Cursor cursor = getUser(username);
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("fname", fname);
contentValues.put("lname", lname);
contentValues.put("password", password);
long result;
if (cursor.getCount() == 0) {
// added fname, lname, password
contentValues.put("username", username);
result = db.insert("users", null, contentValues);
} else {
result = db.update("users", contentValues, "fname=?", new String[] { fname });
result = db.update("users", contentValues, "lname=?", new String[] { lname });
result = db.update("users", contentValues, "username=?", new String[] { username });
result = db.update("users", contentValues, "password=?", new String[] { password });
}
if (result == -1) {
return false;
} else {
return true;
}
}
public long saveUser1(String active) {
Cursor cursor = getUser(active);
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("active", active);
long result;
if (cursor.getCount() == 0) {
result = db.insert("users", null, contentValues);
} else {
result = db.update("users", contentValues, "active=?", new String[] { active });
}
return db.update("users", contentValues, "active=?", new String[] { active });
}
public Cursor getUser(String username) {
SQLiteDatabase db = this.getReadableDatabase();
String sql = "SELECT * FROM users WHERE username=?";
return db.rawQuery(sql, new String[] { username });
}
MainActivity.java
public void save(View view) {
// added fname, lname, password
fname = ((EditText)findViewById(R.id.editText1)).getText().toString();
lname = ((EditText)findViewById(R.id.editText2)).getText().toString();
username = ((EditText)findViewById(R.id.editText3)).getText().toString();
password = ((EditText)findViewById(R.id.editText4)).getText().toString();
if (username.isEmpty()) {
Toast.makeText(getApplicationContext(), "Email cannot be empty!", Toast.LENGTH_LONG).show();
return;
}
boolean result = sqliteHelper.saveUser(fname, lname, username, password);
if (result) {
Toast.makeText(getApplicationContext(), "Successfully saved!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Failed to save!", Toast.LENGTH_LONG).show();
}
Intent intent = new Intent(MainActivity.this, Next.class);
startActivity(intent);
}
Next.java
public void save(View view) {
long result = sqliteHelper.saveUser1(active);
}
В вашем классе Next.java вы передаете активный в методе saveUser1(), который, я думаю, является логической строкой. И этот метод передает эту логическую строку активный как имя пользователя, чтобы проверить, существует ли этот пользователь (с именем пользователя «да» / «нет»), что неверно.
Также ваша реализация метода saveUser1() неверна. Вы помещаете все результаты операций с базами данных в значение результат, но не вернули его.
Редактировать:
public long saveUser1(String username, String active) {
Cursor cursor = getUser(username);
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("active", active);
long result;
if (cursor.getCount() == 0) {
result = db.insert("users", null, contentValues);
} else {
result = db.update("users", contentValues, "username=?", new String[] { username });
}
return result;
}
ааа ладно. Спасибо. Но как я могу это улучшить ?? Я понятия не имею
Я отредактировал свой ответ, чтобы показать вам возможное решение. Попробуйте и дайте мне знать, работает ли это.
привет @Fayee, не могли бы вы показать подробности, например, какие данные вы сохранили в БД, а затем что вы получили из запросов? Если вы не отправите входные данные должным образом, вы не сможете ожидать правильных результатов. Надеюсь, вы понимаете, что я просто делюсь возможным решением, поэтому у меня нет всего потока данных вашего приложения.
Предлагается попытаться создать минимальный пример, демонстрирующий ту же проблему.