insert JSON data using Room Library

前端 未结 3 471
忘掉有多难
忘掉有多难 2020-12-31 15:43

I have very complex JSON response coming from server. I need to insert in local database.

Below is my json response

{
  \"currentdate\": \"2018-02-         


        
3条回答
  •  时光说笑
    2020-12-31 16:22

    Are you using retrofit?

    Here is your 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
    }
    

    Create a model that can serialize that json and then type @Entity (tableName = "myTableName") above the class name for that model.

    @Entity (tableName = "my_complex_model")
    public class MyCompledModel {
        public String currentDate;
    
        @TypeConverter(ParentDataTypeConverter.class)
        public List data;
    }
    
    public class ParentData {
        public String date;
    
        @TypeConverter(NestedDataTypeConverter.class)
        public List data;
    }
    
    public class NestedData {
        public int id;
        public int schedulId;
        public int userId;
        public String completedOn;
    }
    

    etc.. you get the point.

    You need to add a typeConverter for the lists so that they know how to populate cell in the db.

    public class NestedDataTypeConverter {
        private static Gson gson = new Gson();
        private static Type type = new TypeToken>(){}.getType();
    
        @TypeConverter
        public static List stringToNestedData(String json) {
            return gson.fromJson(json, type);
        }
    
        @TypeConverter
        public static String nestedDataToString(List nestedData) {
            return gson.toJson(nestedData, type);
        }
    }
    

    Then you need to create a Dao Interface

    @Dao
    interface MyComplexModelDao {
        @Query("..")
        void delete(int id);
    
        @Query("..")
        void insert(MyComplexModel model);
    }
    

    Then lastly in the Database class you need to annotate the model.

    @Database(entities = { 
        MyComplexModel.class, ... others }
    
    @TypeConverters(value = { 
        EmployeeSlimTypeConverter.class, ... others }
    
    public abstract class AppDatabase extends RoomDatabase {
        public abstract MyComplexModelDao myComplexModelDao();
    }
    

    Something like that, don't copy paste. This is just written from my head.

提交回复
热议问题