сохранение состояния ArrayList <String>в базе данных SQLite (Android) - PullRequest
0 голосов
/ 10 июля 2010

Я работаю над приложением для Android, которое будет отображать строки для пользователя, а затем у пользователя будет возможность добавить его в список избранных.Я искал и искал и не могу найти правильный способ сделать это.Я получил один проект с открытым исходным кодом, все работало, пока пользователь не удалил избранное.База данных очистит строку данных, но при добавлении новой строки она будет вести себя так, как если бы в удаленной строке все еще были данные, оставляя пробелы в списке избранных.

это мой метод вставки

  public long insertString(String newString) 
  {
    ContentValues newStringValue = new ContentValues();

    newStringValue.put(KEY_STRING, newString);

    return db.insert(DATABASE_TABLE, null, newStringValue);
  }

возвращаемое длинное значение всегда будет увеличиваться, даже если я использую метод удаления:

 public boolean removeString(long _rowIndex)
  {
    return db.delete(DATABASE_TABLE, KEY_ID + "=" + _rowIndex, null) > 0;
  }

, если я пытаюсь удалить третий индекс, а пользователь удалил вопрос по третьему индексу,метод возвращает false, есть ли способ полностью удалить все строки без данных?

Ответы [ 3 ]

0 голосов
/ 10 июля 2010

Вы должны использовать CursorAdapter или ResourceCursorAdapter , а при изменении данных вызывать cursor.requery () , чтобы обновить все.

0 голосов
/ 11 марта 2013
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;

}

}
0 голосов
/ 10 июля 2010

Может быть, просто закодировать список строк как что-то вроде JSON, а затем сохранить как длинную строку (blob / clob)? Я бы использовал процессор JSON * JSON , но есть много вариантов на выбор (Guice или XStream, если вы предпочитаете XML). Я имею в виду, если вы действительно не нуждаетесь в реляционных аспектах данных (не нужно искать пользователей с определенной записью в списке путем запросов), а просто нужно сохранять списки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...