当前位置: 首页 > 知识库问答 >
问题:

让领域和GSON一起工作

盖晋
2023-03-14

我有一个项目,我正在通过GSON和Volley阅读一些json。我想把我的数据保存在数据库中,我希望Realm是一个好的解决方案。我选择了我的第一个类,它有七个成员变量,所有的Strings和int,并让它扩展RealmObject,并将其中一个int确定为主键。它编译得很好,但是当它运行时,我在日志中得到大量的输出,最终应用程序在显示主要活动之前就崩溃了。GSON似乎不喜欢解析扩展了RealmObject的类。

所以我做了一些搜索,从Realm网站上找到了这篇文章,但它是针对旧版本的Realm(我目前使用的是0.87)

https://realm.io/docs/java/0.77.0/#other-图书馆

它提供了一个解决方案,但是我不能让这个解决方案为我工作,因为他们解析他们的GSON的方式和我不同。也许我们可以通过帮助我来解决这个问题,但是我想知道这个解决方案是否有效,因为它是旧版本的??总之,我是这样解析我的GSON的:

private void DisplayData(int count, final ArrayList<TwoLineSummaryCardDataObject> tlscdo,
                                 final TwoLineSummaryViewAdapter lsva) {

    final String url = "https://mydata.com/mydata";
    final GsonRequest gsonRequest = 
          new GsonRequest(url, MyData.class, null, new Response.Listener<MyData>() {

        @Override
        public void onResponse(MyData myData) {
            tlscdo.clear();
            // Disable Realm stuff for now
            //Realm realm = Realm.getDefaultInstance();
            //realm.beginTransaction();
            for (int i = 0; i < myData.getData().size(); i++) {
                tlscdo.add(new TwoLineSummaryCardDataObject(myData.getData().get(i)));
                //realm.copyToRealmOrUpdate(myData.getData().get(i));
            }
            //realm.commitTransaction();
            lsva.notifyDataSetChanged();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            if(volleyError != null) Log.e("MainActivity", volleyError.getMessage());
            Toast.makeText(MainActivity.this, "Error in Volley", Toast.LENGTH_SHORT).show();
        }
    }
    );

    // Add the request to the queue
    Volley.newRequestQueue(this).add(gsonRequest);
    VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(gsonRequest);

1)如何更新我的代码,以便我可以使用GsonBuilder,如Realm javadoc页面上的示例?

2) 我是不是在浪费时间,因为这些代码是为旧版本的Realm编写的,而现在有不同的/更好的/没有办法让GSON和Realm一起玩了?

编辑:需要查看MyData类。其实很简单:

    public class MyData {
        @PrimaryKey
        private Integer id;

        private String name;
        private String abbrev;
        private String countryCode;
        private Integer type;
        private String infoURL;
        private String wikiURL;

        // followed by a bunch of getters and setters
 }

要澄清的是,它可以这样运行。如果我添加“extends RealmObject”,它仍然会编译,但在运行时,它只会发出各种消息,然后应用程序最终会在几秒钟后崩溃(我想是内存不足),而没有显示活动。

编辑2,根据要求添加日志。

当我用“扩展RealmObject”运行它时,这就是logcat。

http://pastebin.com/raw/1VZq8bQD

如果我把“extends RealmObject”去掉,它运行得很好。

共有1个答案

卢永寿
2023-03-14

1)如何更新我的代码,以便我可以使用GsonBuilder,如Realm javadoc页面上的示例?

您可以创建一个扩展请求的新类

mGson = new Gson();

与代码写在realm.io的网站。

2) 我是不是在浪费时间,因为这些代码是为旧版本的Realm编写的,而现在有不同的/更好的/没有办法让GSON和Realm一起玩了?

在撰写此答案时,realm的最新版本是0.87.1,使用GSON的方法是相同的。所以这仍然是正确的方法。

 类似资料:
  • 我已经成功地建立了TailwindCSS上Gridsome以下说明:https://gridsome.org/docs/assets-css/#tailwind 但是,这些说明并没有提到如何设置autoprefixer。因此,我自己尝试了一下,如下所示: npm安装自动刷新器 修改了文件(请参见下面的修改代码,其中包含我所更改内容的注释) 运行 将类添加到以查看是否添加了任何供应商前缀 结果。。。

  • 我正在试验把杰克逊和龙目岛结合起来。这些是我的课: 这些是我添加到类spth中的JAR: > 龙目岛:https://projectlombok.org/downloads/lombok.jar(1.16.10version) 此外,Netbeans项目被配置为“保存时不编译”、“生成调试信息”、“报告不推荐使用的API”、“跟踪java依赖项”、“Activacte注释处理”和“编辑器中的Act

  • 在KeyCloak中可以让一个领域的用户管理另一个领域吗?我的目标是拥有两个领域--adminRealm和UserRalm。在adminRealm中应该是用户,他们将能够登录到我们的管理应用程序,他们可以通过Keycloak rest api创建“普通用户”,这将被放置到UserRealm中。 目前我的解决方案工作在一个领域,在那里我有管理用户,可以登录到我的管理应用程序,在那里他可以在相同的领域

  • 如何让jersey和@webservlet协同工作? 泽西资源配置: 在resourceConfig中注册的jersey资源: web servlet 案例1:访问此http://localhost:8088/ResponseFilterweb/login 控制台日志: 访问这个http://localhost:8088/ResponseFilterweb/hello 案例2:更改应用程序配置资源

  • 我在官方留档中找不到任何信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significanttext-aggregation.html 问题是,我试图在应用了带状图过滤器/分析器的“多字段”()上聚合重要术语: 我得到了空桶: 多字段定义:

  • 因此,如果我不能重写字符串作为它的最终结果(因此阻止我重写它的compareTo()方法来调用compareToIgnoreCase()),那么还有其他方法可以实现吗? 任何帮助都是非常感谢的。