【发布时间】:2015-12-23 22:26:28
【问题描述】:
我有一个项目,我正在通过 GSON 和 Volley 读取一些 json。我想将我的数据保存在数据库中,我希望 Realm 是一个很好的解决方案。我选择了我的第一个类,它有七个成员变量,所有字符串和整数,并让它扩展 RealmObject 并将其中一个整数标识为主键。它编译得很好,但是当它运行时,我在日志中得到了大量的输出,最终应用程序在显示主要活动之前就崩溃了。看来 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 类。真的很简单:
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
}
为了澄清,它像这样运行良好。如果我添加“扩展 RealmObject”,它仍然会编译,但在运行时,它只会喷出各种消息,然后应用程序最终会在几秒钟后崩溃(我猜是内存不足)而没有显示活动。
编辑2,按要求添加logcat。
当我使用“扩展 RealmObject”运行它时,这就是 logcat。
http://pastebin.com/raw/1VZq8bQD
如果我把“extends RealmObject”拿出来,它会完美运行。
【问题讨论】:
-
你能展示你的 MyData 类吗?
-
MyData 类代码按要求添加。
-
好吧,你会显示错误信息吗?
-
已按要求添加了 Logcat。
-
老实说,logcat 还不够清晰,您能否再次使用仅警告过滤器?第二个是最好将您的数据包含在这样的变量中 Data data = myData.getData();并且还包含大小,然后像这样使用它 int dataSize = data.size().