【问题标题】:GWT / GAE offline app for android - Advanced适用于 Android 的 GWT / GAE 离线应用程序 - 高级
【发布时间】:2013-02-07 12:54:01
【问题描述】:

大家好,这里有很多关于 gwt 离线可能性的帖子。但他们都没有完全回答我的问题。

这里只是一些摘录:

我使用的 GWT、GAE 和 Android 技术摘录:

  • 请求工厂
  • RPC 请求
  • JDO
  • 科尔多瓦/Phonegap
  • 本地存储
  • html5 应用缓存

那么我现在的问题是什么?

  • 当我在没有互联网连接的情况下启动我的应用程序时,它不会加载任何内容。我收到错误 500,因为没有互联网连接。
  • 它不会从离线缓存中加载 HTML、CSS 和 JavaScript。

我现在是因为我的 webapp 尝试连接到 www.mypage.com,但没有得到任何响应。

如果我在线,我是否可以从我的安卓设备上的本地资源启动我的页面并从我的服务器获取响应,如果我没有任何连接,是否可以从我的本地存储获取响应?

我尝试使用本地资源(编译的 HTML、CSS 和 JavaScript)来实现它,但在这种情况下,它不会随时连接到来自谷歌应用引擎的日期。显而易见的结果:没有数据。

【问题讨论】:

    标签: java google-app-engine gwt cordova html5-appcache


    【解决方案1】:

    是的,如果您没有连接,您可以从本地存储中获取响应。绝对的。

    在扩展 com.google.gwt.core.ext.linker.AbstractLinker 的链接器中,遍历工件并检查它是否是 rpc 代码 (1)。如果是,则将其添加到清单的网络部分 (2)。

    然后在您的 rpc 回调中(由于没有网络,这将失败),设置您的 @Override public void onFailure(Throwable caught) { ...} 方法以从本地存储中获取数据并从那里继续。

    (1) 示例 --

    private boolean isRPRCall(EmittedArtifact artifact) {
            return (artifact.getPartialPath().substring(artifact.getPartialPath().length() - 3)).equals("rpc");
        }
    

    (2) 我的看起来像:

    CACHE MANIFEST
    file.jsp
    /myapp/myapp.nocache.js
    [etc. etc...]
    
    NETWORK:
    /myapp/34C9362A2B2ED625B4FE3FF8E80A4A60.gwt.rpc
    /myapp/586D3102158048D2D56BA386A134648D.gwt.rpc
    /myapp/CCA65B31464BDB27545C23C142FEEEF8.gwt.rpc
    FALLBACK:
    

    【讨论】:

    • @Sam 我认为应该。我认为您只需像使用 rpc 一样在 onFail 方法中处理它。我还怀疑您不需要在网络清单中指定任何内容。在最坏的情况下,我希望您只需要弄清楚您在 NETWORK 下需要什么。试试看。我收到关于代码不可用的 rpc 错误,所以我将它添加到清单中,然后它就可以工作了。只需尝试在请求工厂的 onFail 方法中获取本地数据。
    • 这在大多数情况下都有效。我创建了一个链接器,它创建了正确的清单文件。但答案是不够的。你如何处理动态图像?你不能在离线缓存文件中列出它。我的应用程序脱机运行,但没有文件。你对此有什么想法吗?尤其是 gae/blobservice?
    • 为什么不能在离线缓存中列出呢?如果它不能在那里列出,那么 html5 离线应用程序将不适合您。您是否需要制作一个 servlet 以便在清单请求它们时为它们提供服务?我曾经使用 blobstore 来提供我的 gwt javascript(以绕过之前的 1 gb 应用程序限制),所以我有一个 servlet 来处理该请求。我认为这就是您所需要的,并且您必须将离线使用的所有资源放入链接器中。 [请记住,如果 servlet 的 url 与您在代码中的要求不同,您可以使用 FALLBACK 条目来处理 url]
    • 如果我在清单中列出所有图像 - 所有图像都会首先下载。不是吗?我为不同的客户提供不同图像的应用程序,所以我不能在那里列出。或者你认为我可以为不同的客户创建不同的清单文件吗?图像在编译时还没有准备好。那么我可以在运行时更改清单吗?我可以使用 servlet 来提供清单文件吗?
    • 是的,您可以使用 servlet 提供清单 [对不起,实际上我使用的是 javax.servlet.Filter]。我目前根据语言标题提供不同的清单。您很可能通过重写/完成过滤器中的清单来包含您需要的任何图像。确保使用 response.setContentType("text/cache-manifest");这可能是它自己的线程的主题,但我通过 context.getRequestDispatcher(fileName).include(request, response);
    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2011-05-27
    • 2013-04-02
    • 2019-02-08
    • 2023-03-06
    相关资源
    最近更新 更多