我在当前的android项目中有SQLite数据库,TEXT列表示从我自己的Java类转换的JSON对象。像这样:
String myClassInJsonString = gson.toJson(MyJavaClass.class)
Gson类允许我使用.fromJson(string, objectType)
方法将存储在我的数据库中的JSON字符串转换回所有getter和setter的原始类。
我的问题:
有没有办法将我的类从数据库保存回原始类类型,这样我就可以使用它的getter并获得对象的具体值?
我可以使用它,但我不希望将(长)JSON字符串加载到xml TextViews或任何视图。我想将它加载回原始类类型,然后使用一些getter并获取我想在TextView中显示的值。
String[] from = {Provider.MyClass.FIRST_COLUM, Provider.MyClass.SECOND_COLUMN };
int[] to = {R.id.textID_1, R.id.textID_2};
this.simpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.list_layout, null, from, to, Defaults.NO_FLAGS);
我应该使用任何(自己的)适配器,而不是SimpleCursorAdapter吗? 感谢。
答案 0 :(得分:0)
我决定将列类型从TEXT更改为BLOB,并使用此代码获取我的实体列表。
public List<Entity> getAllEntities(String tableName, String column) {
List<Entity> entities = new ArrayList<>();
String selectQuery = "SELECT " + column
+ " FROM " + tableName;
EntitiesDatabaseOpenHelper openHelper = new EntitiesDatabaseOpenHelper(this);
SQLiteDatabase database = openHelper.getReadableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
byte[] entityBlob = cursor.getBlob(cursor.getColumnIndex(column));
String json = new String(entityBlob);
Gson gson = new Gson();
Entity entity = gson.fromJson(json, new TypeToken<Entity>() {
}.getType());
entities.add(entity);
} while (cursor.moveToNext());
}
cursor.close();
return entities;
}
这不是一个非常幸运的解决方案。我找到了一种方法来将每个实体的数据存储在表中,每个实体参数都保存在一个列中。然后我可以使用连接和自己的适配器来显示数据。