Json字符串以realm对象,最快的方式

时间:2015-07-01 13:34:55

标签: 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();

1 个答案:

答案 0 :(得分:4)

这取决于您的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事务是阻塞的,所以如果你有执行交易的多个后台线程会相互阻塞。