我有以下代码,我在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();
答案 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事务是阻塞的,所以如果你有执行交易的多个后台线程会相互阻塞。