我有以下代码,我在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事务是阻塞的,所以如果你有多个后台线程进行事务处理他们会互相阻挡.