草庐IT

android - 让 GSON 和 Realm 玩得更好

coder 2023-11-18 原文

我正在尝试使用 Realm + GSON。 如果他们能很好地合作,那将是天造地设的一对。

但是,当我使用“extends RealmObject”扩展我的模型对象时,我得到了这个:

10-08 17:00:19.578  12492-12492/appwise.be.gsontestproject E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: appwise.be.gsontestproject, PID: 12492
    java.lang.StackOverflowError
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:372)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:356)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:128)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:75)
            at com.google.gson.Gson.getAdapter(Gson.java:358)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:84)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:83)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:129)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:75)
            at com.google.gson.Gson.getAdapter(Gson.java:358)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:109)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:84)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:83)
            at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:129)
            at com.google.gson.internal.bin

有可用的修复方法吗? :-)

最佳答案

你可以这样做:

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;
        }
    })
    .create();

String json = "{ name : 'John', email : 'john@corporation.com' }"; 用户 user = gson.fromJson(json, User.class);

http://realm.io/docs/java/0.77.0/#gson

关于android - 让 GSON 和 Realm 玩得更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260214/

有关android - 让 GSON 和 Realm 玩得更好的更多相关文章

  1. ruby-on-rails - 更好的替代方法 try( :output). try( :data). try( :name)? - 2

    “输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  2. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  3. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  4. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  5. ruby-on-rails - Rails Asset Pipeline 更好的错误或堆栈跟踪 - 2

    刚刚将应用程序从rails3.0.9升级到3.2.1,当我运行bundleexecrakeassets:precompile时出现错误,这很好,但是回溯没有告诉我在哪里语法问题来self的css或scss文件。我尝试对“0ee5c0e69c92af0”进行greping,但该字符串没有出现在我的项目中。bundleexecrakeassets:precompile:allRAILS_ENV=productionRAILS_GROUPS=assets--trace**Invokeassets:precompile:all(first_time)**Executeassets:precom

  6. ruby-on-rails - 对于 Ruby 应用程序,是否有比 Sanitize 更好的替代方案? - 2

    我爱Sanitize.这是一个了不起的实用程序。我遇到的唯一问题是,它需要永远准备一个开发环境,因为它使用Nokogiri,这对编译时间来说是一种痛苦。是否有任何程序可以在不使用Nokogiri的情况下执行Sanitize的操作(如果没有别的,只是温和地执行它的操作)?这将以指数方式提供帮助! 最佳答案 Rails有自己的SanitizeHelper。根据http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html,它将Thissanitizehe

  7. Ruby:从模块中将多个方法作为 proc 返回的更好方法 - 2

    从模块中返回一个类似proc的方法非常容易:moduleFoodefself.bar#Methodimplementationenddefself.baz#Methodimplementationenddefself.qux#Methodimplemenatationenddefself.zoo#MethodimplementationendendFoo.method(:bar)#Returnsaprocobject但是如果我想从同一个模块返回多个(但不是全部)方法怎么办?一种方法是:[:bar,:baz].inject([]){|memo,i|memo有没有更好、更敏捷的方法来做同样

  8. ruby-on-rails - 更好的写法 @instances.count > 0 - 2

    我有这个代码:0%>#@statesisanactiverecordcollection我只是觉得应该有更好的方式来写这个。我正在寻找类似的东西:我意识到这是一个微小的变化,但它会是一个受欢迎的清理。 最佳答案 您可能需要ActiveRecord的any?http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-any-3FDostuffhereif@stateshasatleastoneresult 关

  9. ruby-on-rails - 在调用方法之前检查 nil 对象的更好方法是什么? - 2

    我有这个方法调用,我必须使用...financial_document.assets.length但是financial_document.assets可能是nil。我可以用...financial_document.assets.nil??'0':financial_document.assets.length有没有重复性较低的方法? 最佳答案 DaveW.Smith的方向是正确的。检查一下:http://www.nach-vorne.de/2007/4/24/attr_accessor-on-steroids一个简单的解决方案如

  10. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

随机推荐