Добрый вечер всем, это мой класс DatabaseHelper:
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "Users.db";
private static final String DB_TABLE = "Users_Table";
//Colonne
private static final String ID = "ID";
private static final String NAME = "NAME";
private static final String CREATE_TABLE = "CREATE TABLE "+ DB_TABLE+" ("+
ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
NAME+ " TEXT "+ ")";
public DatabaseHelper (Context context) {
super(context, DB_NAME, null, 1);
}
@Override
public void onCreate (SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL( "DROP TABLE IF EXISTS "+ DB_TABLE );
onCreate( db );
}
public boolean updateData(int id, String name) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues( );
contentValues.put( NAME, name );
contentValues.put( ID, id );
db.update( DB_TABLE, contentValues, "ID = ?", new String[] {String.valueOf( id )} );
db.close();
return true;
}
//Metodo per inserire dati
public boolean insertData (String name) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues( );
contentValues.put( NAME, name );
long result = db.insert( DB_TABLE, null, contentValues );
return result != -1; //Se il risultato è = -1 i dati NON vengono inseriti
}
//Metodo per cancellare i dati
public int deleteSelectedItem(String NAME) {
SQLiteDatabase db = this.getWritableDatabase();
int result = db.delete( DB_TABLE, "NAME = ?", new String[] {NAME} );
return result;
}
//Metodo per visualizzare i dati
public Cursor viewData(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "Select * from "+DB_TABLE;
Cursor cursor = db.rawQuery(query, null);
return cursor;
}}
В MainActivity я вызываю метод следующим образом:
builder.setPositiveButton( "Modifica", new DialogInterface.OnClickListener() {
@Override
public void onClick (DialogInterface dialog, int which) {
if (!editText.getText().toString().isEmpty()) {
listItem.set( position, editText.getText().toString().trim() );
db.updateData( editText.getText().toString() );
arrayAdapter.notifyDataSetChanged();
Toast.makeText( MainActivity.this, "Elemento modificato", Toast.LENGTH_SHORT ).show();
} else {
editText.setError( "aggiungi elemento qui" );
}
}
} );
Когда я его использую, ListView обновляется, но когда я перезапускаю эмулятор, отредактированный текст возвращается в исходное состояние. Таким образом, метод не обновляет элементы в базе данных. Что не так с моим кодом? Спасибо
РЕДАКТИРОВАТЬ: Это метод viewData в Main:
private void viewData () {
Cursor cursor = db.viewData();
if (cursor.getCount() == 0) {
Toast.makeText( this, "Nessun dato da visualizzare", Toast.LENGTH_SHORT ).show();
} else {
while (cursor.moveToNext()) {
listItem.add( cursor.getString( 1 ) );
//index 1 è il nome, index 0 è l'ID
}
arrayAdapter = new ArrayAdapter<>( MainActivity.this, R.layout.support_simple_spinner_dropdown_item, listItem );
userlist.setAdapter( arrayAdapter );
}
}