如何将存储在数据库中的JSON还原到<myclass> object

时间:2016-05-28 15:43:55

标签: java android json database adapter

我在当前的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吗? 感谢。

1 个答案:

答案 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;
        }

这不是一个非常幸运的解决方案。我找到了一种方法来将每个实体的数据存储在表中,每个实体参数都保存在一个列中。然后我可以使用连接和自己的适配器来显示数据。