在SQLiteDatabase(Android)中保存ArrayList <string>状态</string>

时间:2010-07-09 22:37:03

标签: android database sqlite

我正在开发一个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,是否有办法完全删除没有数据的所有行?

3 个答案:

答案 0 :(得分:0)

也许只是将String List编码为类似JSON的东西,然后保存为长字符串(blob / clob)?我会使用Jackson JSON processor,但有很多选择可供选择(Guice,或XStream,如果您更喜欢XML)。我的意思是,假设您并不真正需要数据的关系方面(不需要通过查询找到具有特定列表条目的用户),而只需要保留列表。

答案 1 :(得分:0)

您应该使用CursorAdapterResourceCursorAdapter,并在修改数据通话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;

}

}
相关问题