我目前正在创建一个从服务器下载列表并将这些列表放入SQLite数据库的应用程序。在Mainactivity中,它调用db中的列表并将它们放入自定义适配器中,一切正常,等等。
在此之后,我通过几个屏幕来处理listdata,在最后的活动中,它使用一个查询来删除它从db中处理的行。我使用logcat在此之后打印数据库,它显示该行已被删除。
接下来它将我带回Mainactivity并在其onResume中再次从db加载列表,但发现应该删除的行仍在其中。列表视图正在正确更新,这确实是从数据库中检索本应删除的数据的问题。
那么,任何人都知道为什么我会在另一个活动中获取已被删除的行?
Mainactivity:
private List<String> list = new ArrayList<>();
public void onResume() {
super.onResume();
context = getApplicationContext();
ConsLoadListDataSource cllDataSource = new ConsLoadListDataSource(context);
cllDataSource.open();
list = cllDataSource.sqliteToListIds();
cllDataSource.close();
logcat("Jadajada: " + list.toString());
}
SQLiteHelper:
public List<String> sqliteToListIds() {
List<String> conList= new ArrayList<>();
if (!db.isOpen()) {
open();
}
Cursor cursor = db.query(ConsLoadListSQLHelper.TABLE_CONS_HEADER,
allConsListColumns, null, null, "loadlist" , null, "loadlist");
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
conList.add(cursor.getString(1));
cursor.moveToNext();
}
db.close();
return conList;
}
删除方法有效,但由于要求:
public void deleteList(int id) {
if (!db.isOpen()) {
open();
}
db.delete(ConsLoadListSQLHelper.TABLE_CONS_HEADER,
ConsLoadListSQLHelper.CONS_HEADER_ID + " = " + id, null);
db.close();
}
修改
通过删除服务器上的行并在返回MainActivity之前再次从服务器检索所有数据,我找到了一种解决方法,但我仍然不知道如何解决原始问题问题,这使我的应用程序更依赖于互联网连接,所以它不完美,但现在必须做。
答案 0 :(得分:0)
要删除单个项目,您必须使用
public void deleteRule(String value) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(Table_Name, Key_value + " = ?",
new String[] { value });
db.close();
}
希望它有所帮助。