0

在 eclipse c2dm 连接项目中,会为您生成 c2dm-server.jar 并将其添加到您的项目中。如果您深入了解它的源代码,您会发现它与原始 chrometophone 项目的源代码几乎相同:

http://code.google.com/p/chrometophone/source/browse/trunk/appengine/c2dm/com/google/android/c2dm/server/C2DMConfigLoader.java?r=2

但是有一个很大的不同: InputStream 行从:

InputStream is = this.getClass().getClassLoader()
                                .getResourceAsStream("/dataMessagingToken.txt");

InputStream is = servletContext.getResourceAsStream("/dataMessagingToken.txt");

最大的不同是您现在需要一个 ServletContext 而不仅仅是任何类来从战争中获取该 dataMessagingToken.txt 资源。我问的唯一原因是因为我正在尝试恢复旧样式行,因此不需要 ServletContext 来获取该资源,但无论出于何种原因,该行不再有效,并且永远找不到文件。(要清楚,我已经尝试将该文件放在战争的基础目录中,因为默认项目有它,并且也像其他人建议的那样放在 /WEB-INF/classes 目录中)

最后一件事,对于那些想知道我为什么要这样做而不只是传递 ServletContext 的人。这是因为我想从任务队列发送,而不是从任何用户交互。所以我可能会以错误的方式处理这一切,但我觉得我很接近。

谢谢!

4

1 回答 1

1

你可以解决这个问题,或者我认为你会发现任务队列中的任务是作为 servlet 执行的,并且还会有一个 ServletContext。

此外,如果没有通过您的电话传递,您应该可以通过以下方式在任何地方获取它:

getThreadLocalRequest().getSession().getServletContext()

于 2012-06-09T18:24:31.043 回答