Как сохранить вложенную запись из JSON в SQLite?

160
18 ноября 2019, 11:30

Я получаю данные в таком виде:

{
    "duration": 5,
    "intervals": 60,
    "time_work_start": 540,
    "time_work_end": 1080,
    "lunch_start": 780,
    "lunch_end": 840,
    "workweek": {
        "1": "Понедельник",
        "2": "Вторник"
    },
    "time_delay": 15
}

Тело запроса выглядит так:

public class BodyUserSettings implements Serializable {
@SerializedName("duration")
@Expose
private String duration;
@SerializedName("intervals")
@Expose
private String intervals;
@SerializedName("time_work_start")
@Expose
private String timeWorkStart;
@SerializedName("time_work_end")
@Expose
private String timeWorkEnd;
@SerializedName("lunch_start")
@Expose
private String lunchStart;
@SerializedName("lunch_end")
@Expose
private String lunchEnd;
@SerializedName("workweek")
@Expose
private Workweek workweek;
@SerializedName("time_delay")
@Expose
private String timeDelay;
public String getDuration() {
    return duration;
}
public void setDuration(String duration) {
    this.duration = duration;
}
public BodyUserSettings withDuration(String duration) {
    this.duration = duration;
    return this;
}
public String getIntervals() {
    return intervals;
}
public void setIntervals(String intervals) {
    this.intervals = intervals;
}
public BodyUserSettings withIntervals(String intervals) {
    this.intervals = intervals;
    return this;
}
public String getTimeWorkStart() {
    return timeWorkStart;
}
public void setTimeWorkStart(String timeWorkStart) {
    this.timeWorkStart = timeWorkStart;
}
public BodyUserSettings withTimeWorkStart(String timeWorkStart) {
    this.timeWorkStart = timeWorkStart;
    return this;
}
public String getTimeWorkEnd() {
    return timeWorkEnd;
}
public void setTimeWorkEnd(String timeWorkEnd) {
    this.timeWorkEnd = timeWorkEnd;
}
public BodyUserSettings withTimeWorkEnd(String timeWorkEnd) {
    this.timeWorkEnd = timeWorkEnd;
    return this;
}
public String getLunchStart() {
    return lunchStart;
}
public void setLunchStart(String lunchStart) {
    this.lunchStart = lunchStart;
}
public BodyUserSettings withLunchStart(String lunchStart) {
    this.lunchStart = lunchStart;
    return this;
}
public String getLunchEnd() {
    return lunchEnd;
}
public void setLunchEnd(String lunchEnd) {
    this.lunchEnd = lunchEnd;
}
public BodyUserSettings withLunchEnd(String lunchEnd) {
    this.lunchEnd = lunchEnd;
    return this;
}
public Workweek getWorkweek() {
    return workweek;
}
public void setWorkweek(Workweek workweek) {
    this.workweek = workweek;
}
public BodyUserSettings withWorkweek(Workweek workweek) {
    this.workweek = workweek;
    return this;
}
public String getTimeDelay() {
    return timeDelay;
}
public void setTimeDelay(String timeDelay) {
    this.timeDelay = timeDelay;
}
public BodyUserSettings withTimeDelay(String timeDelay) {
    this.timeDelay = timeDelay;
    return this;
}
public class Workweek implements Serializable {
    @SerializedName("1")
    @Expose
    private String _1;
    @SerializedName("2")
    @Expose
    private String _2;
    public Workweek(String _1, String _2) {
        super();
        this._1 = _1;
        this._2 = _2;
    }
    public String getId() {
        return _1;
    }
    public void setId(String id) {
        this._1 = id;
    }
    public Workweek withId(String _1) {
        this._1 = _1;
        return this;
    }
    public String getTitle() {
        return _2;
    }
    public void setTitle(String _2) {
        this._2 = _2;
    }
    public Workweek withTitle(String _2) {
        this._2 = _2;
        return this;
    }
}

}

POST-запрос:

@POST("/settings")
Call<BodyUserSettings> postIdToken(@Body BodyIdToken id_token);

В mainactivity:

 private void sendRequestIdTokenToServer() {
    BodyIdToken hexPost = new BodyIdToken();
    hexPost.idToken = mIdToken;
    Call<BodyUserSettings> call = mService.postIdToken(hexPost);
    call.enqueue(new Callback<BodyUserSettings>() {
        @Override
        public void onResponse(@NonNull Call<BodyUserSettings> call, @NonNull Response<BodyUserSettings> response) {
            mBodyUserSettings = response.body();
            mMainDatabase.saveSettings(mBodyUserSettings);
            mMainDatabase.saveWorkweekDays(mBodyWorkweek);
        }
        @Override
        public void onFailure(@NonNull Call<BodyUserSettings> call, @NonNull Throwable t) {
        }
    });
}

Таблицы в SQLite:

private final String CREATE_SETTINGS_TABLE = "CREATE TABLE IF NOT EXISTS " +
            SETTINGS_TABLE + "(" +
            _id + " INTEGER PRIMARY KEY AUTOINCREMENT," +
            DURATION + "INTEGER," +
            INTERVALS + " INTEGER," +
            TIME_WORK_START + " INTEGER," +
            TIME_WORK_END + " INTEGER," +
            LAUNCH_START + " INTEGER," +
            LAUNCH_END + " INTEGER," +
            WORKWEEK + " INTEGER," +
            TIME_DELAY + " INTEGER" + ")";
    private final String CREATE_WORKWEEK_TABLE = "CREATE TABLE IF NOT EXISTS " +
            WORKWEEK_TABLE + "(" +
            _id + " INTEGER PRIMARY KEY," +
            ID_DAY + " TEXT," +
            TITLE_DAY + " TEXT" + ")";

Сохранение в SQLite

public void saveSettings(BodyUserSettings settings) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(DURATION, settings.getDuration());
    cv.put(INTERVALS, settings.getIntervals());
    cv.put(TIME_WORK_START, settings.getTimeWorkStart());
    cv.put(TIME_WORK_END, settings.getTimeWorkEnd());
    cv.put(LAUNCH_START, settings.getLunchStart());
    cv.put(LAUNCH_END, settings.getLunchEnd());
    cv.put(WORKWEEK, String.valueOf(settings.getWorkweek()));
    cv.put(TIME_DELAY, settings.getTimeDelay());
    db.insert(SETTINGS_TABLE, null, cv);
    Log.d("LOG_TAG_saveSettings ", "save: " +
            settings.getDuration() + "; " +
            settings.getIntervals() + "; " +
            settings.getTimeWorkStart() + "; " +
            settings.getTimeWorkEnd() + "; " +
            settings.getLunchStart() + "; " +
            settings.getLunchEnd() + "; " +
            settings.getWorkweek() + "; " +
            settings.getTimeDelay() + ".");
    db.close();
}
public void saveWorkweekDays(BodyUserSettings.Workweek workweek) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(ID_DAY, workweek.getId());
    cv.put(TITLE_DAY, workweek.getTitle());
    db.insert(WORKWEEK_TABLE, null, cv);
    Log.d("LOG_TAG_saveWorkweek", "save " +
            workweek.getId() + "; " +
            workweek.getTitle() + ".");
    db.close();
}

}

И в итоге я получаю данные в таком виде:

D/LOG_TAG_saveSettings: save: 5; 60; 540; 1080; 780; 840; com.example.myApp.data.network.entities.BodyUserSettings$Workweek@3ed84f07; 15.

Не пойму, как мне корректно отобразить данные из workweek. Может они вообще неправильно сохраняются. Что я делаю не так?

Если использовать парсинг JSON, то как потом это сохранить в SQLite?

READ ALSO
Отправить POST запрос на сайт в котором нет form

Отправить POST запрос на сайт в котором нет form

Хочу прикрутить к андроид приложению авторизацию на сайт https://wspkbtu

151
Какие различия между findFirst и findAny в Java 8?

Какие различия между findFirst и findAny в Java 8?

Я не очень понимают отличие findFirst() от findAny() в Java Stream API

114
Запись в конец файла

Запись в конец файла

Есть файл, и там есть некоторые строки, мне нужно через Java дописать в конец файла еще строку (или строки)Вот мой метод который это должен был...

151
Эффекты на div при создании через js

Эффекты на div при создании через js

Есть вопросКак мне сделать эффект на div сразу после создания

161