android – Json字符串到realm对象,最快的方式

我有以下代码,我在AsyncTask中运行.它运作良好,但以下几行似乎使它使用时慢3-5秒.有没有更快的方法将我的json字符串转换为领域?

    //Load the local model data. params[0].toString() is a json string loaded from SharedPreferences.
    JsonParser jsonParser = new JsonParser();
    JsonObject o = (JsonObject)jsonParser.parse(params[0].toString());

    Realm realmThread = Realm.getInstance(visnetawrap.appModel);

    //work orders, total entries of 4000.
    JsonArray openWorkOrders = o.getAsJsonArray("work_orders");

    //Convert the lists so they can be used with realm.
    List<OpenOrderObject> woList = visnetawrap.gsonClient.fromJson(openWorkOrders.toString(), new TypeToken<List<OpenOrderObject>>() {
    }.getType());
    realmThread.beginTransaction();
    realmThread.copyToRealm(woList);
    realmThread.commitTransaction();

解决方法:

这取决于您的JSON与模型类的匹配程度.在上面的代码中,您似乎做了很多额外的工作,在字符串表示和对象模型之间进行了2次转换.

如果模型匹配您的JSON 1:1,您可以使用realm.createAllFromJson(OpenOrderObject.class,openWorkOrders).除非GSON以某种方式操纵输入,否则您不必先使用GSON进行转换.你可以在这里看到更多:https://realm.io/docs/java/latest/api/io/realm/Realm.html#createAllFromJson-java.lang.Class-org.json.JSONArray-.

此外,如果您的输入相当小(我想这是因为您将它保存在SharedPreferences中),它应该花费几秒钟来解析它,但请注意Realm事务是阻塞的,所以如果你有多个后台线程进行事务处理他们会互相阻挡.

上一篇:java – 无法将参数传递给super();在类的构造函数中扩展RealmBaseAdapter(Realm)


下一篇:java – 使用Realm浏览器在Mac上查看realm文件的加密密钥