【问题标题】:Android + Phonegap + XML dataAndroid + Phonegap + XML 数据
【发布时间】:2012-05-20 16:22:20
【问题描述】:

我正在开发一个 Phonegap Android 应用程序,它是某种目录和产品搜索。它与提供所有数据的服务器 Intranet 同步。

问题是应用程序都已开发,除了同步崩溃。我注意到问题在于 XML 解析。

同步是一个带有按钮的 HTML。单击按钮后,它会启动一个 JS 函数,如下所示:

$.ajax({
     url : "file:///android_asset/xml/produtos.xml",
     data : "{}",
     async : false,
     cache : false,
     dataType : "xml",
}).error(function (xhr, ajaxOptions, thrownError){
     alert(xhr.status);
     alert(thrownError);
}).done(function(data) {
     // search all data, download all files from XML URL tag (used this: https://github.com/phonegap/phonegap-plugins/tree/master/Android/Downloader), construct SQLite statements and throw it in an Array for late DB transaction
     if($(data).find("produtos").length > 0 && $(data).find("produtos").eq(0).find("produto").length > 0) {
          $(data).find("produtos").eq(0).find("produto").each(function() {
               i++;
               produtos[i] = "CONSTRUCT SQL STATEMENT WITH XML PARSED DATA LIKE $(this).find('nome').text()";
          }
     }
});

XML 文件非常大,大约 700kb,大约有 1800 个产品。每个产品内部有大约 10 个直接节点和大约 5 个子节点,内部有其他 10 个节点(细节、图像、相关产品等)。因此,每个产品大约有 80 个节点。我的 XML 中有 1800 * 80 = 144000 个节点。此外,每个产品都有大约 5 个 URL 节点,它们是要下载的文件(我使用的是 https://github.com/phonegap/phonegap-plugins/tree/master/Android/Downloader 插件)。

如果我开始与下载同步,它会因内存泄漏而停止(大约 512mb,不记得正确的消息,但我可以明天发布)。如果我在没有下载的情况下开始同步(只是 XML 解析),则大约需要 30 分钟并且什么都不做(感觉像是在处理,但什么也不做)。我不知道是否有其他选项来同步这个初始数据(其他同步是通过参数传递最后一个同步时间戳来完成的)。你们有什么问题或(可能的)解决方案吗?如果您需要更多信息,请询问我,我需要您的帮助。

谢谢大家!!!

【问题讨论】:

    标签: jquery android xml sqlite cordova


    【解决方案1】:

    我认为您必须将您的 xml 文件拆分为更易于消化的块。 144,000 个节点对于一个移动/JS 应用来说是不合理的 :-) 当然问题是,你控制 xml 目录的生产吗?

    【讨论】:

    • 其他公司管理服务器应用程序和 XML 目录的生产,他们与我的公司非常接近,但我认为他们不会改变这一点......我会尝试。在拒绝的情况下,您知道 XML 中由某些移动/JS 应用程序解析的最佳“合理”节点数量是多少?上周末我搜索了有关 Java XML 解析的信息,我想知道它会比 jQuery XML 解析好多少。您知道将我的同步更改为 Android Java 服务是否可以解决此问题?
    • 很难 100% 确定——而且我的 Android 手机的内存可能比你的少或多 :-) 我建议你做测试:1,000 个节点、2K、5K、10K 等。看看在哪里就处理时间而言,它开始变得不合理。此外,您可能希望把繁重的工作留给大佬们:使用 FileDownloader 插件下载文件,然后编写一个插件来用 Java 进行解析——也许使用 Sax,以向应用程序发送定期反馈。跨度>
    • 另一种解决方案是在您自己的服务器上使用代理 xml 传输,即代替您的 phonegap 应用程序直接提取 xml,您服务器上的代理脚本从第 3 方提取 xml 并将其缓存在您的服务器。然后它将它分解为可管理的块以供您的 phonegap 应用程序使用(phonegap 应用程序会将请求发送到您的代理脚本而不是第 3 方服务器)。
    • 服务器应用程序人员将其代码更改为将节点块分块为另一个 xml。因此,我可以分 4 或 5 次解析 xml 文件。现在,我还有其他问题。第一次同步(加载所有数据)在大约 10 分钟内加载。所以,我想玩一些进度条。我使用了 jQuery UI Progressbar,但我无法更新 UI,因为我的 $.ajax 调用是 async:false (因为我需要执行 SQL 语句,我正在将所有同步 JS 运行到事务块中)...任何帮忙?谢谢你们!你真棒! =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多