Android Json字符串到领域对象,最快的方式

Android Json字符串到领域对象,最快的方式,android,json,realm,Android,Json,Realm,我在异步任务中运行以下代码。它工作得很好,但下面几行代码似乎使它在使用时慢了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)jsonPa

我在异步任务中运行以下代码。它工作得很好,但下面几行代码似乎使它在使用时慢了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();
//加载本地模型数据。params[0]。toString()是从SharedReferences加载的json字符串。
JsonParser JsonParser=新的JsonParser();
JsonObject o=(JsonObject)jsonParser.parse(参数[0].toString());
Realm realmThread=Realm.getInstance(visnetawap.appModel);
//工单,共录入4000条。
JsonArray openWorkOrders=o.getAsJsonArray(“工单”);
//转换列表,以便它们可以与realm一起使用。
List woList=visnetawap.gsonClient.fromJson(openWorkOrders.toString(),new-TypeToken()){
}.getType());
realmThread.beginTransaction();
copyToRealm(woList);
realmThread.commitTransaction();

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

如果您的模型与JSON 1:1匹配,您可以只使用
realm.createAllFromJson(OpenOrderObject.class,openWorkOrders)
。除非GSON以某种方式操纵输入,否则不必首先使用GSON对其进行转换。您可以在此处看到更多:


此外,如果您的输入非常小(我猜是因为您将其保存在SharedReferences中),则解析此文件不需要几秒钟,但请注意,领域事务正在阻塞,因此如果您有多个后台线程执行事务,它们将相互阻塞。

Christian,谢谢您的回答。我将测试它,看看这是否有帮助。我从上面把它缩小到这行代码:List woList=visnetawap.gsonClient.fromJson(openWorkOrders.toString(),new TypeToken(){}.getType());看来你是说这是不必要的,我会很快给你回复。不是说粗鲁或者其他什么,但对于Android来说,Realm是不是很慢,或者我只是用错了?我试着做了一个抓取,花了20多秒。不过,我确实有大约4k的对象。我注意到realm在iOS上运行得很好,但只有64位设备。听起来你好像做错了什么。我们所有的基准测试都比原始SQLite更快。我建议在我们的GitHub页面上提出一个问题,以便我们可以进一步调查:我只想更新您的信息,并说我不能使用createAllFromJson。我正在使用改型将json与gson转换器结合起来。当我使用createAllFromJson时,它似乎创建了对象,但当我进行查询时,不会返回任何内容,不知道为什么。json与对象模型匹配,但我使用serializename,所以我假设这就是为什么我需要首先使用gson?