Gson 反序列化 Realm 基元列表

2024-02-19

我正在将领域与 gson 一起使用。我有一个模态,其中有一个 int 类型字段列表。 Realm 目前不支持基元列表。为了解决这个问题,有一个解决方案。我创建了 RealmInt 类。

import io.realm.RealmObject;

public class RealmInt extends RealmObject {
    private int val;

    public int getVal() {
        return val;
    }

    public void setVal(int val) {
        this.val = val;
    }
}

我有一个像这样的大模态对象..

public class Product extends RealmObject {
    @PrimaryKey
    private int productID;
    private int priority;
    private boolean isFavourite;
    .....
    .....
    .....
    private RealmList<Document> documents;
    private RealmList<ProductInfoGroup> productInfoGroups;
    private RealmList<RealmInt> categories;

我必须将下面的 json 数组反序列化为产品模态。

[{
        "productID": 776,
        "categories": [
            35
        ],
        "name": "",
        "priority": 3,
        ......
        "status": 2,
        "documents": [
            {
                "documentID": 74,
                "productID": 776,
                "name": null,
                ....
                "isDefault": true
            }
        ],
        "productInfoGroups": [
            {
                "productInfoGroupID": 1575,
                "productID": 776,
                .....
                "productInfos": [
                    {
                        "productInfoID": 2707,
                        "productInfoGroupID": 1575,
                        "title": "",
                        ...
                    },
                    {
                        "productInfoID": 2708,
                        "productInfoGroupID": 1575,
                        ...
                    },
                    {
                        "productInfoID": 2709,
                        .....
                    }
                ]
            }
        ],
        "lastUpdateDate": 130644319676570000,
        "isActive": true
    },....]

有一个解决方案here https://stackoverflow.com/questions/28733024/gson-deserialization-of-liststring-into-realmlistrealmstring但它不适用于大物体。我只需要更改类别数组,其他反序列化必须默认完成 gson 反序列化。


您必须为每个不同于 JSON 表示的变量指定自定义类型适配器。所有其他对象都会自动处理。在你的情况下,这只是categories变量与其余变量一样应该自动映射。

JSON:

[
    { "name"  : "Foo",
      "ints" : [1, 2, 3]
    },
    { "name"  : "Bar",
      "ints" : []
    }
]  

模型类:

public class RealmInt extends RealmObject {
    private int val;

    public RealmInt() {
    }

    public RealmInt(int val) {
        this.val = val;
    }

    public int getVal() {
        return val;
    }

    public void setVal(int val) {
        this.val = val;
    }
}

public class Product extends RealmObject {

    private String name;
    private RealmList<RealmInt> ints;

    // Getters and setters
}

GSON配置:

Gson gson = new GsonBuilder()
        .setExclusionStrategies(new ExclusionStrategy() {
            @Override
            public boolean shouldSkipField(FieldAttributes f) {
                return f.getDeclaringClass().equals(RealmObject.class);
            }

            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                return false;
            }
        })
        .registerTypeAdapter(new TypeToken<RealmList<RealmInt>>() {}.getType(), new TypeAdapter<RealmList<RealmInt>>() {

            @Override
            public void write(JsonWriter out, RealmList<RealmInt> value) throws IOException {
                // Ignore
            }

            @Override
            public RealmList<RealmInt> read(JsonReader in) throws IOException {
                RealmList<RealmInt> list = new RealmList<RealmInt>();
                in.beginArray();
                while (in.hasNext()) {
                    list.add(new RealmInt(in.nextInt()));
                }
                in.endArray();
                return list;
            }
        })
        .create();

JsonElement json = new JsonParser().parse(new InputStreamReader(stream));
List<Product> cities = gson.fromJson(json, new TypeToken<List<Product>>(){}.getType());

如果您有多个包装器变量(例如 RealmInt),则需要为每个包装器变量定义一个 TypeAdapter。另请注意,上面的 TypeAdapter 总是会遇到数组。如果您可能发送 JSONnull代替[]您需要在 TypeAdapter 中进行额外检查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gson 反序列化 Realm 基元列表 的相关文章

  • 在 Android 上将视频设置为壁纸

    我想知道如何将视频设置为壁纸 否则不可能 我可以将图像设置为壁纸 并且可以构建动态壁纸 但无法将视频设置为壁纸 所以有人知道我该怎么做吗 提前致谢 我认为唯一可以做到的方法是将其合并到 动态壁纸 中 缺点是正如其他人提到的那样 这会严重影响
  • getItemAtPosition() 未在列表视图中返回值

    我创建了一个自定义基本适配器类 用图像和文本填充列表视图 类的代码如下 public class ViewAdapter extends BaseAdapter private Activity activity private Strin
  • 在运行时绘制HSV圆

    我想在我的应用程序中有一个颜色选择器 如下所示 我尝试过逐像素填充位图 尝试使用画布drawArc 方法 这两种方式都不利于性能 有任何想法吗 它可能不完全是它应该的样子 与颜色 饱和度等有关 但是这是一些东西 http i1272 pho
  • 在 Android 上检测已接听的拨出电话

    我知道这个问题已经被问过很多次了 但没有答案 但我仍然希望有人终于解决了这个问题 问题 我有一台运行 Android 2 3 的未 root 设备 我需要创建一项服务 打电话 等待呼叫被应答 接听电话后挂断电话 有超时 和其他许多人一样 我
  • 读取 Android 4.2 中的 APN?

    我有个问题阅读 APN在安卓v4 2中 是读 不是写APNS 它抛出一个安全异常 没有写入 APN 设置的权限 用户 10068 和当前用户都没有权限 进程有 android permission WRITE APN SETTINGS 相同
  • Android异步服务调用策略

    这是场景 客户端对服务进行远程调用 返回 void 并提供 回调对象 服务在后台线程上执行一些长时间运行的逻辑 然后使用回调对象来触发以太成功或失败 因为这些操作视觉元素 执行 Activity runOnUiThread 块 该场景运行良
  • Android 上 Java 库中的代码出现 NoClassDefFoundError

    我的用户经常遇到错误 应用程序在启动期间崩溃 当应该加载 MainActivity 时 VM 显然找不到该类 我不明白为什么 该应用程序的架构是 我的免费版和专业版都使用一个通用项目 不知道是否相关 请参阅下面的堆栈跟踪 有什么想法吗 ja
  • Firebase 云消息传递 - 如何验证令牌?

    我正在使用 Firebase Cloud Messaging FCM 并且每次在客户设备上生成新令牌时 都会根据下面的缩写代码 我将此新令牌发送到我的服务器数据库 云 并将其保存在其中 以便能够发送未来推送通知使用 CFM API 从服务器
  • 按钮上方带有文本的单选按钮

    我是 Android 新手 我需要在我的活动中添加单选按钮 但我需要将文本放在项目符号按钮的顶部 请提供任何帮助 我发现了以下内容 尽管我不明白 drawable in 选择器和 style Tab 样式是什么 顶部带有文本的单选按钮 ht
  • 不同风格的模块文件

    我正在尝试在同一个应用程序中实现播放服务和华为服务 但希望能够按风格配置使用哪一个 每种风格都使用自己的 applicationIdSuffix 因此 对于每种不同的风格 华为插件都会失败 我无法编译 我的应用程序模块包含agconnect
  • 如何将您的终端与 Android 模拟器连接

    我尝试导航到 android 工具文件夹并输入 adb shell 命令 但它似乎不起作用 我的终端似乎只能识别命令的 adb 部分 并给我一条错误消息 我究竟做错了什么 通过键入列出所有连接的设备adb devices 检查是否列出了任何
  • 为什么 Android 上的免安装应用有两种设置?

    我使用的是运行 Android 11 的 Pixel 3 我发现有 2 种不同的设置可以控制免安装应用的某些方面 设置 应用程序和通知 默认应用程序 打开链接 即时应用程序 即使未安装 也打开应用程序中的链接 切换默认为开 Google P
  • 应用程序运行时相对布局中的元素显示不同

    我有一个ListView在片段内创建 并且它有一个搜索过滤器 问题是 XML 布局在 android studio 中显示正常 但在模拟器或手机中运行时 它显示不同 与我对齐时不正确 并且当我单击SearchView它位于选项卡导航下方 谁
  • Android Studio错误的含义:未注释的参数覆盖@NonNull参数

    我正在尝试 Android Studio 创建新项目并添加默认值后onSaveInstanceState方法创建 MyActivity 类 当我尝试将代码提交到 Git 时 我收到一个我不明白的奇怪错误 代码是这样的 我得到的错误是这样的
  • 特定铃声 firebase 通知 xamarin.android

    How i can force the push notification to run ringtone instead of default notification sound is there any way to ovveride
  • 测试应用内结算:“发布者无法购买此商品”

    我的应用程序似乎已准备好在我的设备上进行应用内购买程序的 现实生活 测试 但是 我在 Play 商店中收到 发布商无法购买此商品 的错误消息 现在 我应该如何测试这个 我不想通过仅用于测试的虚拟帐户重新安装手机来丢失手机的配置 在开发者控制
  • 如何在 Android 中不使用 Intent 裁剪图像

    我正在尝试裁剪图像我使用了下面的代码 意图 i new Intent Intent ACTION PICK android provider MediaStore Images Media EXTERNAL CONTENT URI i pu
  • 如何为部分 Android 活动创建通用代码?

    我的申请中有 14 项活动 这 9 个活动中包含自定义标题栏和选项卡窗格 所以在这里我需要在一个地方编写这个通用代码 而不是在每个包含自定义标题栏和选项卡窗格代码的活动中编写冗余代码 即布局及其活动特定代码 有哪些可能的方法可以做到这一点
  • Android:在surfaceview上实现admob

    我有一个使用 SurfaceView 的小游戏形式的活动 下面是代码片段 我很困惑如何在 SurfaceView 上实现 admob 请建议 public class DroidzActivity extends Activity priv
  • 在自定义对话框中设置文本视图

    我创建了一个自定义对话框 但无法将文本设置到 java 对话框布局中的文本视图中 并且我的程序崩溃了 我的错误是什么 public class Total CBC extends Activity Override protected vo

随机推荐

  • 如何使用 ef core 1 在 UWP 中运行迁移

    我不知道如何使用 EntityFramework Commands 也是 v7 0 0 rc1 final 在 EntityFramework Core v7 0 0 rc1 final 中运行迁移 当我添加迁移 Add Migration
  • Actionscript 3 内省——函数名称

    我试图迭代对象的每个成员 对于每个成员 我检查它是否是一个函数 如果它是一个函数 我想获取它的名称并根据函数的名称执行一些逻辑 我不知道这是否可能 是吗 有小费吗 example var mems Object getMemberNames
  • 如何在 C# 和 DataAnnotation 中创建通用 UniqueValidationAttribute?

    我正在尝试创建一个UniqueAttribute使用System ComponentModel DataAnnotations ValidationAttribute 我希望这是通用的 因为我可以传递 Linq DataContext 表名
  • 在浏览器窗口中更改 PDF 标题

    我有一个 pdf 文件 正在为客户放在网站上 它位于这里 http www optiphysicaltherapy com dev wp content uploads 2014 02 OPTI NewPatientForms pdf ht
  • 如何更改消息框标题? [复制]

    这个问题在这里已经有答案了 如何在asp net中更改此消息框的标题 该标题出现在 IE 中 帮忙 你不能 没有 API 可以执行此操作 默认标题是反网络钓鱼安全功能 如果您希望对警报消息的外观有足够的控制 那么您必须在 DOM 中构建自己
  • CGContextDrawImage 崩溃

    代码如下 void drawLayer CALayer layer inContext CGContextRef ctx CGContextRef context ctx CGContextRetain context CGContextS
  • 应用程序的沙箱虚拟机(概念)

    我想编写一个沙箱虚拟机来执行已编译的程序 我的目标是将该程序与操作系统的其余部分隔离并控制其执行 以便它不会对主机做出任何有害的事情 我假设 执行的程序被编译为可移植可执行格式 并且是机器代码 而不是任何类型的字节代码或 CLR 执行的程序
  • 在 python 中,是否有跨平台的方法来确定哪个进程正在侦听给定端口?

    在linux下 我可以使用lsof i如以下函数所示 def FindProcessUsingPort portnum import os fp os popen lsof i s portnum lines fp readlines fp
  • Android 12 模拟器预览版无连接

    我已经安装了 Android 12 Preview 模拟器 我遇到了很多问题 因为模拟器在启动时崩溃 但在卸载并再次安装并重新启动机器等后 我设法启动它 我现在遇到的问题是互联网连接不起作用 所有其他模拟器都工作正常 我尝试从命令行启动模拟
  • Android:向EditText字段添加小数点,并使其随输入移动

    在我的应用程序中 用户可以在文本字段中输入美元金额 问题是 我需要输入在输入数字时适应最终数字 而不实际输入小数点 解释这一点的最好方法是用一个例子 假设用户从包含以下内容的 EditText 字段开始 用户想要在字段中输入 12 53 即
  • 为 Google App Engine 配置 Jackson

    有什么办法可以配置吗Jackson 配置对象映射器 哪个用于序列化 servlet 响应 Api name rates version v1 title Rates API public class RatesApi static Logg
  • 熊猫,按计数分组并将计数添加到原始数据帧?

    当尝试计算数据框中具有相似 种类 的行时 import pandas as pd items aaa aaa text 1 aaa aaa text 2 aaa aaa text 3 bb bb text 1 bb bb text 2 bb
  • 从 D2006 移植到 XE5 后偶发的访问冲突在 XP 兼容模式下不会发生

    我们有一个在 Delphi 2006 中运行良好的大型应用程序 我们已将其移至 XE5 但经常遇到偶发的访问冲突 我们使用 VCL 表单和许多 DevExpress 以及其他第三方组件 我们正在使用 Windows 7 Profession
  • tess-two 找不到 libpng.so

    我已遵循 tess two 的构建说明Github https github com rmtheis tess two build 我使用 NDK 成功构建了 tess two 并导入了库 我正在尝试运行同一存储库上提供的测试应用程序 但每
  • RTC_WAKEUP 不起作用

    目前我正在开发一个广播接收器应用程序 其中我正在制作一个警报 该警报应该在我们输入秒数后显示一条消息 我使用了 RTC WAKEUP 这意味着它应该在设备打开时显示消息 并且应该打开设备 然后在设备关闭时显示消息 我的问题是 RTC WAK
  • 迁移到Material-UI v5时,如何处理条件类?

    In the 官方迁移指南 https next material ui com guides migration v4 main content 他们给出了以下从 JSS 更改代码的示例 makeStyles 到新的styled mode
  • 单元测试因会话窗口中的“构建失败”而失败,并且没有任何消息提供 Visual Studios 2010 中失败的原因

    我最近在本地计算机上安装了 VS 2010 但似乎无法让 Resharper 5 1 和单元测试正常工作 每当我尝试运行单元测试时 我都会收到 构建失败 测试图标保持灰色 但输出窗口中没有信息 也没有明显的原因 在进行 nant 构建时 单
  • 在向量>上使用push_back [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有点尴尬
  • 如何在 mySQL Server 数据库架构中找到所有填充 100% 空值的列?

    有没有一种 SQL 方法可以找出我的架构中的哪些列完全充满空值 我知道几个表中的某些字段不会被应用程序使用 并且将被删除 但我想看看是否有一种自动化的方法 脚本可以在整个数据库中找到这些字段 以找到代码审查的候选者 可能的删除 如果有必要的
  • Gson 反序列化 Realm 基元列表

    我正在将领域与 gson 一起使用 我有一个模态 其中有一个 int 类型字段列表 Realm 目前不支持基元列表 为了解决这个问题 有一个解决方案 我创建了 RealmInt 类 import io realm RealmObject p