我正在开发一个Android应用程序,它会向用户显示字符串,然后用户可以选择将一个添加到收藏夹列表中。我搜索和搜索,找不到正确的方法。我确实得到了一个开源项目,一切正常,直到用户删除了一个收藏夹。数据库将清除数据行,但是当添加新行时,它的行为就像删除的行仍然有数据一样,将空白留在收藏夹列表中。
这是我的插入方法
public long insertString(String newString)
{
ContentValues newStringValue = new ContentValues();
newStringValue.put(KEY_STRING, newString);
return db.insert(DATABASE_TABLE, null, newStringValue);
}
即使我使用remove方法,返回的long总是会递增:
public boolean removeString(long _rowIndex)
{
return db.delete(DATABASE_TABLE, KEY_ID + "=" + _rowIndex, null) > 0;
}
如果我尝试删除第三个索引,并且用户在第三个索引处删除了一个问题,则该方法返回false,是否有办法完全删除没有数据的所有行?
答案 0 :(得分:0)
也许只是将String List编码为类似JSON的东西,然后保存为长字符串(blob / clob)?我会使用Jackson JSON processor,但有很多选择可供选择(Guice,或XStream,如果您更喜欢XML)。我的意思是,假设您并不真正需要数据的关系方面(不需要通过查询找到具有特定列表条目的用户),而只需要保留列表。
答案 1 :(得分:0)
您应该使用CursorAdapter或ResourceCursorAdapter,并在修改数据通话cursor.requery()时刷新所有内容。
答案 2 :(得分:0)
public static class OrderManager
{
private MyDBOpenHelper _db_Orders;
private static final String GET_Orders = “SELECT * FROM “+Order_TABLE_NAME ;
public OrderManager(Context context)
{
_db_Orders = new MyDBOpenHelper(context);
}
public boolean insert(String orderName, String orderStatus)
{
try
{
SQLiteDatabase sqlite = _db_Orders.getWritableDatabase();
/*
sqlite.execSQL(“INSERT INTO “+ Order_TABLE_NAME +
” (” + KEY_NAME +”, “+ KEY_STATUS + “)” +
” VALUES (‘” + orderName + “‘, ‘” + orderStatus + “‘)”);
*/
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, orderName);
initialValues.put(KEY_STATUS, orderStatus);
sqlite.insert(Order_TABLE_NAME, null, initialValues);
}
catch(SQLException sqlerror)
{
Log.v(“Insert ERROR”, sqlerror.getMessage());
return false;
}
return true;
}
public ArrayList<Order> getOrders()
{
ArrayList<Order> orders = new ArrayList<Order>();
SQLiteDatabase sqliteDB = _db_Orders.getReadableDatabase();
Cursor crsr = sqliteDB.rawQuery(GET_Orders, null);
Log.v(“Select Query result”, String.valueOf(crsr.getCount()) );
crsr.moveToFirst();
for(int i=0; i < crsr.getCount(); i++)
{
orders.add(new Order(crsr.getString(0), crsr.getString(1)));
//Log.v(“DATA”, crsr.getString(0) + ” ” +crsr.getString(1));
crsr.moveToNext();
}
return orders;
}
}