android - 使用 Room Library 插入 JSON 数据

标签 android android-room

我有来自服务器的非常复杂的 JSON 响应。我需要插入本地数据库。

下面是我的json响应

{
  "currentdate": "2018-02-27",
  "data": [
    {
      "date": "2017-11-05",
      "data": [
        {
          "id": 268,
          "schedulId": 268,
          "userId": 70,
          "completedOn": "0000-00-00 00:00:00",
          "currentDate": "2018-02-27",
          "workouts": {
            "workoutDetails": {
              "workoutDetails": "1Day Gain Muscle GYM",
              "workoutName": "Gain Muscle",
              "day": "Day 1",
              "inComplete": "0"
            },
            "stages": [
              {
                "id": 2,
                "mainExerciseName": "Warmup",
                "exerciseSets": 1,
                "exerciseList": [
                  {
                    "exerciseId": 602,
                    "name": "Jumping Jacks",
                    "setReps": "2X25",
                    "sort": 0
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  ],
  "status": 200
}

我如何使用列清除来创建我的 pojo 类。

最佳答案

你在使用改造吗?

这是你的 json:

{
    "currentdate": "2018-02-27",
    "data": [{
        "date": "2017-11-05",
        "data": [{
            "id": 268,
            "schedulId": 268,
            "userId": 70,
            "completedOn": "0000-00-00 00:00:00",
            "currentDate": "2018-02-27",
            "workouts": {
                "workoutDetails": {
                    "workoutDetails": "1Day Gain Muscle GYM",
                    "workoutName": "Gain Muscle",
                    "day": "Day 1",
                    "inComplete": "0"
                },
                "stages": [{
                    "id": 2,
                    "mainExerciseName": "Warmup",
                    "exerciseSets": 1,
                    "exerciseList": [{
                        "exerciseId": 602,
                        "name": "Jumping Jacks",
                        "setReps": "2X25",
                        "sort": 0
                    }]
                }]
            }
        }]
    }],
    "status": 200
}

创建一个可以序列化该 json 的模型,然后在该模型的类名上方键入 @Entity (tableName = "myTableName")

@Entity (tableName = "my_complex_model")
public class MyCompledModel {
    public String currentDate;

    @TypeConverter(ParentDataTypeConverter.class)
    public List<ParentData> data;
}

public class ParentData {
    public String date;

    @TypeConverter(NestedDataTypeConverter.class)
    public List<NestedData> data;
}

public class NestedData {
    public int id;
    public int schedulId;
    public int userId;
    public String completedOn;
}

等..你明白了。

您需要为列表添加一个类型转换器,以便它们知道如何填充数据库中的单元格。

public class NestedDataTypeConverter {
    private static Gson gson = new Gson();
    private static Type type = new TypeToken<List<NestedData>>(){}.getType();

    @TypeConverter
    public static List<NestedData> stringToNestedData(String json) {
        return gson.fromJson(json, type);
    }

    @TypeConverter
    public static String nestedDataToString(List<NestedData> nestedData) {
        return gson.toJson(nestedData, type);
    }
}

然后你需要创建一个Dao接口(interface)

@Dao
interface MyComplexModelDao {
    @Query("..")
    void delete(int id);

    @Query("..")
    void insert(MyComplexModel model);
}

然后最后在数据库类中,您需要注释模型。

@Database(entities = { 
    MyComplexModel.class, ... others }

@TypeConverters(value = { 
    EmployeeSlimTypeConverter.class, ... others }

public abstract class AppDatabase extends RoomDatabase {
    public abstract MyComplexModelDao myComplexModelDao();
}

类似的东西,不要复制粘贴。这是我脑子里写的。

关于android - 使用 Room Library 插入 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027487/

相关文章:

android - React-Native Android ReactContext 返回 null

android - RxJava toList() 不触发 subscribe() 方法(使用 Room)

android - RxJava 不在后台线程上运行

java - 房间: Warnings: Parameter is never used/Variable is never used

kotlin - 无法使用 Room ORM Kotlin 保存包含 List<Model> 的数据模型

android - 如何创建既可用于Android测试又可用于单元测试的测试类?

Android:这不是绘制 Canvas 的方式吗?

java - JSON 变量名称中包含空格

android - 在 Android 元素中使用 CSS

Android Room 数据库大小