im using sqlite with mvvm..but when i click add new and submit comming back to listing page it is not updated record in list.but when i kill app again come to list page it is showing record with duplicate entries of same record.i dont know where my code is getting wrong..plz help
db helper:-
public class DbHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2;
static final String DATABASE_NAME = "kuncorosqlite.db";
public static final String TABLE_SQLite = "sqlite";
public static final String COLUMN_ID = "id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_ADDRESS = "address";
ArrayList<HashMap<String, String>> listofMaps = new ArrayList();
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
final String SQL_CREATE_MOVIE_TABLE = "CREATE TABLE " + TABLE_SQLite + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY autoincrement, " +
COLUMN_NAME + " TEXT NOT NULL, " +
COLUMN_ADDRESS + " TEXT NOT NULL" +
" )";
db.execSQL(SQL_CREATE_MOVIE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_SQLite);
onCreate(db);
}
public MutableLiveData<ArrayList<HashMap<String, String>>> getAllData() {
MutableLiveData<ArrayList<HashMap<String, String>>> wordList;
wordList = new MutableLiveData<ArrayList<HashMap<String, String>>>();
String selectQuery = "SELECT * FROM " + TABLE_SQLite;
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
map.put(COLUMN_ID, cursor.getString(0));
map.put(COLUMN_NAME, cursor.getString(1));
map.put(COLUMN_ADDRESS, cursor.getString(2));
listofMaps.add(map);
wordList.postValue(listofMaps);
} while (cursor.moveToNext());
}
Log.e("select sqlite ", "" + wordList);
database.close();
return wordList;
}
public void insert(String name, String address) {
SQLiteDatabase database = this.getWritableDatabase();
String queryValues = "INSERT INTO " + TABLE_SQLite + " (name, address) " +
"VALUES ('" + name + "', '" + address + "')";
Log.e("insert sqlite ", "" + queryValues);
database.execSQL(queryValues);
database.close();
}
public void update(int id, String name, String address) {
SQLiteDatabase database = this.getWritableDatabase();
String updateQuery = "UPDATE " + TABLE_SQLite + " SET "
+ COLUMN_NAME + "='" + name + "', "
+ COLUMN_ADDRESS + "='" + address + "'"
+ " WHERE " + COLUMN_ID + "=" + "'" + id + "'";
Log.e("update sqlite ", updateQuery);
database.execSQL(updateQuery);
database.close();
}
public void delete(int id) {
SQLiteDatabase database = this.getWritableDatabase();
String updateQuery = "DELETE FROM " + TABLE_SQLite + " WHERE " + COLUMN_ID + "=" + "'" + id + "'";
Log.e("update sqlite ", updateQuery);
database.execSQL(updateQuery);
database.close();
}
}
viewmodel:-
public class Viewmodell extends AndroidViewModel {
private DbHelper repository ;
MutableLiveData<ArrayList<HashMap<String, String>>> allNotesLivedata;
public Viewmodell(@NonNull Application application) {
super(application);
repository = new DbHelper(application);
allNotesLivedata = repository.getAllData();
}
void insert(String name,String Address) {
repository.insert(name,Address);
}
void update(int id, String name, String address) {
repository.update(id,name,address);
}
void delete(int id) {
repository.delete(id);
}
public LiveData<ArrayList<HashMap<String, String>>> getAllNotes() {
return allNotesLivedata;
}
}
mainactivity (listing page):-
public class MainActivity extends AppCompatActivity {
ListView listView;
AlertDialog.Builder dialog;
List<Data> itemList = new ArrayList<Data>();
Adapter adapter;
DbHelper SQLite = new DbHelper(this);
Viewmodell viewmodell;
public static final String TAG_ID = "id";
public static final String TAG_NAME = "name";
public static final String TAG_ADDRESS = "address";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
SQLite = new DbHelper(getApplicationContext());
viewmodell = ViewModelProviders.of(this).get(Viewmodell.class);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
listView = (ListView) findViewById(R.id.list_view);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, AddEdit.class);
startActivity(intent);
}
});
adapter = new Adapter(MainActivity.this, itemList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final String idx = itemList.get(position).getId();
final String name = itemList.get(position).getName();
final String address = itemList.get(position).getAddress();
Intent intent = new Intent(MainActivity.this, DetailsAct.class);
intent.putExtra(TAG_ID, idx);
intent.putExtra(TAG_NAME, name);
intent.putExtra(TAG_ADDRESS, address);
startActivity(intent);
}
});
getAllData();
}
private void getAllData() {
viewmodell.getAllNotes();
viewmodell.allNotesLivedata.observe(this, new Observer<ArrayList<HashMap<String, String>>>() {
@Override
public void onChanged(ArrayList<HashMap<String, String>> hashMaps) {
for (int i = 0; i < hashMaps.size(); i++) {
String id = hashMaps.get(i).get(TAG_ID);
String poster = hashMaps.get(i).get(TAG_NAME);
String title = hashMaps.get(i).get(TAG_ADDRESS);
Data data = new Data();
data.setId(id);
data.setName(poster);
data.setAddress(title);
itemList.add(data);
}
adapter.notifyDataSetChanged();
}
});
}
@Override
protected void onResume() {
super.onResume();
itemList.clear();
getAllData();
}