我按照以下指南部署了谷歌的移动后端启动程序:backend
我在这些步骤上与客户进行了测试,结果运行良好。
现在,我从
https://github.com/bradabrams/GeekSerendipity-io13
并跟随着台阶
http://bradabrams.com/2013/05/google-io-2013-session-overview-from-nothing-to-nirvana-in-minutes-cloud-backend-for-your-android-application-building-geek-serendipity/
直到第三步。到目前为止,我能看到一张地图,它正确地显示了我在地图上的位置。但是,当我查看AppEngine日志时,我看到了以下异常:
com.google.api.server.spi.SystemService invokeServiceMethod: cause={0} java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at com.google.cloud.backend.beans.FilterDto.getOperand(FilterDto.java:131)
at com.google.cloud.backend.beans.FilterDto.getDatastoreFilter(FilterDto.java:99)
at com.google.cloud.backend.spi.QueryOperations.executeQuery(QueryOperations.java:109)
at com.google.cloud.backend.spi.QueryOperations.list(QueryOperations.java:84)
at com.google.cloud.backend.spi.EndpointV1.list(EndpointV1.java:227)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:45)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:339)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:163)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:121)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:435)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:442)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:186)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:306)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:298)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:439)
at java.lang.Thread.run(Thread.java:722)我为什么要得到这个例外?
我检查过的东西:
CloudQuery:
CloudQuery (Geek/PAST): filter: F: op: EQ, values: [name, null]QueryDto:
{filterDto={operator=EQ, values=[name, null]}, kindName=Geek, limit=1, regId=APA91bHtELzN0oF2ZtUa91epD7gzxtM8R7EUP7O7w_9ebCxT7bEFbWO9CEhmkulOayXkJ8zRz1eXehfh-ZD4Mru0bug7nbnolrDdzOlbN5orsixKUyyZtMyHOy7MHNfA46gFQEWfvo9FQdCe8fsZ1qlumuyybSgQJw, scope=PAST, sortAscending=false, sortedPropertyName=name}我怀疑这里的问题是值:name,null。但我不能再破译了。这个查询到底应该是什么样子?
基于应用程序描述,我们可能会在这里查询所有可用的"Geek“实例,以便在地图上显示,但由于我不太了解Google提供的示例代码,所以我不确定情况是否如此。(我也是EndPoints的新手,这也是我尝试应用程序的原因。)
而且,到目前为止,我们的数据存储有0个"Geek“类实例。
我非常感谢任何能帮助我在调试过程中向前迈进的指针。
更新:--我尝试了来自API的相同查询。它返回一个HTTP200OK,但我仍然在AppEngine日志上看到异常。
事实上,即使我从查询中删除{filterDto={operator=EQ,values=name,null},也会显示日志中的错误。
我开始怀疑这是不是我所担心的无伤大雅的错误。我将继续剩下的步骤,看看是否遇到任何其他麻烦。
发布于 2013-10-05 08:06:20
如果您正在使用客户端代码的源代码,不要停止每一步来检查该应用程序是否有效。
在您完成身份验证之前,它将无法工作!它就是这样设计的。这是最终产品。
更多解释如下:
在上面的错误中,我在JSON查询中提到了以下内容:
operator=EQ, values=[name, null]下面是生成此查询的代码:
getCloudBackend().listByProperty("Geek", "name", Op.EQ,
accountName, null, 1, Scope.PAST,
new CloudCallbackHandler<List<CloudEntity>>() {...换句话说,它应该翻译成这样的东西:
operator=EQ, values=[name, "somefunkyuser@gmail.com"]但是,它没有这样做,因为我目前还没有设置身份验证。换句话说,在Consts.java中,"IS_AUTH_ENABLED“应该是"true",您还应该在那里生成和添加"Web”键,就像在http://bradabrams.com/2013/05/google-io-2013-session-overview-from-nothing-to-nirvana-in-minutes-cloud-backend-for-your-android-application-building-geek-serendipity/上指定的那样
按照说明,继续写到页的末尾。一旦你到了页面的末尾,如果你正确的遵循,然后测试出应用程序,它将工作。
附加说明:
当为Android应用程序生成“客户机ID”时,请确保在云控制台中“注册应用程序”两次:
https://stackoverflow.com/questions/19162330
复制相似问题