我有一个项目,我正在通过GSON和Volley阅读一些json。我想将数据保存在数据库中,我希望Realm是一个很好的解决方案。我拿了我的第一个类,它有七个成员变量,所有字符串和整数,并让它扩展了RealmObject并将其中一个int标识为主键。它编译得很好,但是当它运行时,我会在日志中获得大量的输出,并且最终应用程序在显示主要活动之前崩溃。似乎GSON不喜欢解析扩展了RealmObject的类。
所以我做了一些搜索,我在Realm网站上发现了这篇帖子,但它是针对较旧版本的Realm(我目前使用的是0.87)
https://realm.io/docs/java/0.77.0/#other-libraries
它提供了一个解决方案,但我无法让这个解决方案适合我,因为他们正在以不同的方式解析他们的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)如何更新我的代码,以便像Realm javadoc页面上的示例一样使用GsonBuilder?
2)我是否在浪费时间,因为该代码适用于旧版本的Realm,现在有一种不同/更好/没有办法让GSON和Realm一起玩?
编辑:有一个要查看MyData类的req。这很简单:
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
}
澄清一下,它运行得很好。如果我添加&#34;扩展RealmObject&#34;,它仍然会编译,但是在运行时,它只是喷出各种消息然后应用程序最终崩溃(内存不足,我推测)几秒后没有展示活动。
编辑2,按要求添加logcat。
当我使用&#34;扩展RealmObject&#34;来运行它时,这就是logcat。
http://pastebin.com/raw/1VZq8bQD
如果我采用&#34;扩展RealmObject&#34;出来,它运行得很好。
答案 0 :(得分:1)
1)如何更新我的代码,以便像Realm javadoc页面上的示例一样使用GsonBuilder?
您可以创建一个扩展Request<T>
的新类,并将其应用于现有代码。在您的情况下,最快的方法是将GsonRequest
类源代码复制到新的源代码,并修改构造函数中初始化Gson
对象的行:
mGson = new Gson();
使用在realm.io网站上编写的代码。
2)我是否在浪费时间,因为该代码适用于旧版本的Realm,现在有一种不同/更好/没有办法让GSON和Realm一起玩?
在写这个答案时,最新版本的领域是0.87.1,而method of working with GSON是相同的。所以这应该仍然是正确的方法。