我使用下面的代码。
其中Sorting.costItemBySortKey是静态比较器
repository.addCostItems(items)将项目保存到SQLite数据库。
我发现在某些设备上并非所有项目都保存到db。
有什么问题?我发生这件事是因为我在保存前使用Collections.sort,不是吗?
protected void createCostItems(){
List<CostItem> items = new ArrayList<>();
String[] itemsName = context.getResources().getStringArray(R.array.default_cost_items);
int[] itemsIcon = context.getResources().getIntArray(R.array.default_cost_item_icons);
int[] itemsGroup = context.getResources().getIntArray(R.array.default_cost_item_group);
int[] costType = context.getResources().getIntArray(R.array.default_cost_item_cost_type);
int[] costSort = context.getResources().getIntArray(R.array.default_cost_item_sort1);
CostItem item;
for (int i=0; i< itemsName.length; i++) {
item = new CostItem(i, itemsName[i], itemsIcon[i], itemsGroup[i], costType[i], costSort[i]);
items.add(item);
}
Collections.sort(items, Sorting.costItemBySortKey);
repository.addCostItems(items);
costItems=null;
}
保存到db的代码
public void addCostItem(CostItem costItem){
costItemDataAdapter.appendItem(database, costItem);
}
public void appendItem(SQLiteDatabase db, T item){
DataRow row = this.itemToRow(item);
if(item.getId() == Item.NEW_ID)
row.column("_id").setValue(null);
ContentValues values = new ContentValues();
List<DataColumn> rowColumns = row.Columns();
for (DataColumn column: rowColumns){
if(column.getDataType().equals("integer"))
values.put(column.getName(), column.getInteger());
if(column.getDataType().equals("varchar"))
values.put(column.getName(), column.getString());
if(column.getDataType().equals("real"))
values.put(column.getName(), column.getFloat());
}
int id = (int)db.insert(this.Name, null, values);
item.setId(id);
}