Java 适用于android的GWT/GAE离线应用程序-高级

Java 适用于android的GWT/GAE离线应用程序-高级,java,google-app-engine,gwt,cordova,html5-appcache,Java,Google App Engine,Gwt,Cordova,Html5 Appcache,大家好,这里有很多关于gwt离线可能性的帖子。但是他们没有一个完全回答我的问题 这里只是一些摘录: 我使用的GWT、GAE和Android技术摘录: 请求工厂 RPC请求 JDO Cordova/Phonegap 本地存储 html5应用缓存 那我现在有什么问题 当我在没有互联网连接的情况下启动应用程序时,它不会加载任何内容。我收到错误500,因为没有互联网连接 它不会从脱机缓存加载HTML、CSS和JavaScript 我现在认为这是因为我的webapp试图连接到www.m

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

这里只是一些摘录:

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

  • 请求工厂
  • RPC请求
  • JDO
  • Cordova/Phonegap
  • 本地存储
  • html5应用缓存
那我现在有什么问题

  • 当我在没有互联网连接的情况下启动应用程序时,它不会加载任何内容。我收到错误500,因为没有互联网连接
  • 它不会从脱机缓存加载HTML、CSS和JavaScript
我现在认为这是因为我的webapp试图连接到www.mypage.com,但没有得到任何响应

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


我试图用本地资源(编译的HTML、CSS和JavaScripts)实现它,但在这种情况下,它在任何时候都不会连接到来自google app engine的日期。明显的结果是:没有数据。

是的,如果没有连接,您可以从本地存储获得响应。当然

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

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

(1) 例如--

(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:

@山姆,我想应该。我认为您可以像处理rpc一样,使用onFail方法来处理它。我还怀疑您不需要在网络清单中指定任何内容。在最坏的情况下,我想你只需要弄清楚你在网络下需要什么。试试看。我收到一个rpc错误,关于代码不可用,所以我将其添加到清单中,并使其正常工作。只需尝试使用请求工厂的onFail方法获取本地数据。这在大多数情况下都有效。我创建了一个链接器,它创建了正确的清单文件。但答案是不够的。如何处理动态图像?无法在脱机缓存文件中列出它。我的应用程序离线运行,但没有文件。你对此有什么想法吗?特别是gae/blobservice?为什么不能在脱机缓存中列出它?如果它不能在那里列出,那么html5离线应用程序将不适用于你。您是否需要创建一个servlet,以便在清单请求时为其提供服务?我曾经使用blobstore为我的gwt javascript提供服务(以绕过以前的1GB应用程序限制),因此我有一个servlet来处理该请求。我认为这就是你所需要的,你必须把所有离线使用的资源放到链接器中。[请记住,如果servlet的url与您在代码中询问的方式不同,您可以使用回退条目来处理该url]如果我在清单中列出所有图像,则首先下载所有图像。不是吗?我为不同的客户提供不同图像的应用程序,因此无法在那里列出。或者您认为我可以为不同的客户创建不同的清单文件吗?图像在编译时未准备好。那么我可以在运行时更改清单吗?我可以使用servlet来服务清单文件吗?是的,您可以使用servlet来服务清单[对不起,实际上我使用的是javax.servlet.Filter]。我目前根据语言标题提供不同的清单。通过在过滤器中重写/完成清单,您很可能会包含所需的任何图像。确保为其提供response.setContentType(“文本/缓存清单”);这可能是它自己的线程的主题,但我是通过context.getRequestDispatcher(文件名).include(请求,响应)实现的;
CACHE MANIFEST
file.jsp
/myapp/myapp.nocache.js
[etc. etc...]

NETWORK:
/myapp/34C9362A2B2ED625B4FE3FF8E80A4A60.gwt.rpc
/myapp/586D3102158048D2D56BA386A134648D.gwt.rpc
/myapp/CCA65B31464BDB27545C23C142FEEEF8.gwt.rpc
FALLBACK: