程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android 存储嵌套的 JSON 对象从 Api 调用到 Sqlite大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Android 存储嵌套的 JSON 对象从 Api 调用到 sqlite?

开发过程中遇到Android 存储嵌套的 JSON 对象从 Api 调用到 sqlite的问题如何解决?下面主要结合日常开发的经验,给出你关于Android 存储嵌套的 JSON 对象从 Api 调用到 sqlite的解决方法建议,希望对你解决Android 存储嵌套的 JSON 对象从 Api 调用到 sqlite有所启发或帮助;

如何在 androID SQLite 数据库中存储具有其他对象作为实例变量的对象。

基本上,我的 Rest API 调用的 JsON 响应如下所示:

{
  "Announcements": [
    {
      "coursEID": "196014605914","ID": "269865109791","text": "Ignore the prevIoUs link. Join the already started CHM 112","state": "PUBliSHED","alternatelink": "https://classroom.Google.com/c/MTk2MDE0NjA1OTE0/p/MjY5ODY1MTA5Nzkx","creationTime": "2021-02-08T09:18:05.420Z","updatetiR_434_11845@e": "2021-02-08T09:18:05.415Z","creatorUserID": "101562079220031604157"
    },{
      "coursEID": "196014605914","ID": "246419265642","text": "Note2","materials": [
        {
          "drivefile": {
            "drivefile": {
              "ID": "1CjL0RV7PdcIrrRWii1ApUown3YoyEKTx","title": "HYDROCARBONS2-C-C,C=C AND ALKYnes.pdf","alternatelink": "https://drive.Google.com/open?ID=1CjL0RV7PdcIrrRWii1ApUown3YoyEKTx","thumbnailUrl": "https://drive.Google.com/thumbnail?ID=1CjL0RV7PdcIrrRWii1ApUown3YoyEKTx&sz=s200"
            },"shareMode": "VIEW"
          }
        }
      ],"alternatelink": "https://classroom.Google.com/c/MTk2MDE0NjA1OTE0/p/MjQ2NDE5MjY1NjQy","creationTime": "2021-01-25T10:41:45.094Z","updatetiR_434_11845@e": "2021-01-25T10:41:44.260Z",],"nextPagetoken": "GkUSQxJBCLHA5Pr4LhI4Cg5IDAi2pfD_BRDAoOKzAQoOYgwItqXw_wUQgMCNtwEKCgiAgICg29jhsFoKCgiAgIDgwu223Hk"
}

这是公告对象的一部分,但有些没有材质对象,如上所示。问题是并不是所有的公告都有 Material 对象,所以一个公告对象最多可以有 20 个材质对象。

我的数据模型如下所示:

public class CourseDetailsItem{
    private final String message;
    private final Long time;
    private final String author;
    private final List<Material> materials;

//... Appropriate getters and setters

//Material.java
public class Material{
    private final String label;
    private final String link;

//... Appropriate getters and setters

存储对象以供离线使用的最佳方式是什么?

在我的 DbHelper 类中,我很困惑

sqliteDatabase db = this.getWritableDatabase();
        String CREATE_COURSE_table = "create table IF NOT EXISTS _"+coursEID+" ("+ ID +" INTEGER PRIMARY KEY," + messaGE + " TEXT,"+ TIME + " IntegeR," + AUTHOR + " TEXT," + LABEL + " TEXT," + link + " TEXT"+")";
        db.execsql(CREATE_COURSE_tablE);
        ContentValues values = new ContentValues();
        values.put(messaGE,courseDetailsItem.getmessage());
        values.put(TIME,courseDetailsItem.getTime());
        values.put(AUTHOR,courseDetailsItem.getAuthor());
        //values.put(); HERE HOW DO I STORE MATERIAL OBjeCT
        //ConsIDering the fact that Material Object Could be upto Twenty for each  of my entry

请大家...

这里请不要负能量,我只是想不出这里的解决方案

解决方法

最好的或最直观的方法是在关系 SQLite 数据库中也反映它们的关系。

这意味着您将有一个 Announcement 表和一个 @H_689_7@material 表。

在 @H_689_7@material 表中,您需要添加一个“外键”,其中包含它所指的 Announcement 的主 ID。这样您就可以为一个 @H_689_7@material 存储 0...n 个 Announcement。您的 Announcement 模型/表不需要更改,可以保持原样。

注意:据我所知,sqlite 不支持真正的“外键”定义。这还不错,因为它只是关于基于主键从一个表到另一个表的“指针”的概念。在真实的、成熟的数据库中,它将评估它并确保基于它的数据完整性。这种严格性并不总是需要或想要的,因此在 SQLite 中不受支持 - 使其更轻量级。您还可以通过正确编写的代码确保相同的数据完整性。

那么您将有两个如下所示的表格:

公告(coursEID、id、text、...)

材料AnnouncementId、id、title、alternateLink、...)

编辑:这也称为 OneToMany 关系。当您寻找“在关系数据库中对 OneToMany 关系建模”时,您会发现很多资源对其进行了更详细的解释。

在存储 Announcement 时,您还将“简单地”将 @H_689_7@material 对象存储在它们的表中。在这里,您可以评估是否要保持强大的数据完整性并希望在单个事务中存储所有 Announcement 和 @H_689_7@material 对象,或者是否不需要如此严格并且您将存储它在不同的交易中。

有几种可能:

  • 单个 Announcement 对象与其所有 @H_689_7@material 对象一起存储在一个事务中
  • 所有 Announcement 对象与所​​有 @H_689_7@material 一起存储在一个事务中
  • 所有 Announcement 对象存储在一个事务中,然后所有 @H_689_7@material 对象存储在一个事务中

第一个选项是逻辑上偏爱并提供最佳用户体验。

从数据库加载 Announcement 时,您可以决定是要加载 @H_689_7@material 的列表 eagerly 还是 lazy。查询应如下所示:

SELECT * FROM Material WHERE AnnouncementId = this.id

它会返回与个人 @H_689_7@material 相关联的 Announcement 列表。

大佬总结

以上是大佬教程为你收集整理的Android 存储嵌套的 JSON 对象从 Api 调用到 Sqlite全部内容,希望文章能够帮你解决Android 存储嵌套的 JSON 对象从 Api 调用到 Sqlite所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:对象从