首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行Geek应用程序时IndexOutOfIndexException下载

运行Geek应用程序时IndexOutOfIndexException下载
EN

Stack Overflow用户
提问于 2013-10-03 14:49:54
回答 1查看 253关注 0票数 0

我按照以下指南部署了谷歌的移动后端启动程序: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日志时,我看到了以下异常:

代码语言:javascript
复制
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)

我为什么要得到这个例外?

我检查过的东西:

  1. Consts.java中的项目ID和项目编号是正确的。
  2. 我已经检查了,以确定我的Maps API键是正确的
  3. 代码控制台中为Maps API键指定的包名是正确的:;com.turbomanage.sample.geekwatch
  4. Appengine后端本身运行正常。下面是API资源管理器链接: ah/api/explorer
  5. 身份验证被设置为“打开”,因此不应该因为任何原因而被阻止。
  6. 因为我已经在https://developers.google.com/cloud/samples/mbs/android/上提到的安卓示例应用程序上测试了后端。看起来后端运行得很好。最有可能的是,这看起来像是Geek Serendi观客户端传递错误参数的情况。
  7. 在Eclipse中,我检查了代码以查看CloudQuery和QueryDto的外观,下面是它的外观:

CloudQuery:

代码语言:javascript
复制
CloudQuery (Geek/PAST): filter: F: op: EQ, values: [name, null]

QueryDto:

代码语言:javascript
复制
{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日志上看到异常。

9ebCxT7bEFbWO9CEhmkulOayXkJ8zRz1eXehfh-ZD4Mru0bug7nbnolrDdzOlbN5orsixKUyyZtMyHOy7MHNfA46gFQEWfvo9FQdCe8fsZ1qlumuyybSgQJw%2522%252C%250A++%2522scope%2522%253A+%2522PAST%2522%252C%250A++%2522sortAscending%2522%253A+false%252C%250A++%2522sortedPropertyName%2522%253A+%2522name%2522%250A%257D&

事实上,即使我从查询中删除{filterDto={operator=EQ,values=name,null},也会显示日志中的错误。

我开始怀疑这是不是我所担心的无伤大雅的错误。我将继续剩下的步骤,看看是否遇到任何其他麻烦。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-05 08:06:20

如果您正在使用客户端代码的源代码,不要停止每一步来检查该应用程序是否有效。

在您完成身份验证之前,它将无法工作!它就是这样设计的。这是最终产品。

更多解释如下:

在上面的错误中,我在JSON查询中提到了以下内容:

代码语言:javascript
复制
operator=EQ, values=[name, null]

下面是生成此查询的代码:

代码语言:javascript
复制
getCloudBackend().listByProperty("Geek", "name", Op.EQ,
                                        accountName, null, 1, Scope.PAST,
                                        new CloudCallbackHandler<List<CloudEntity>>() {...

换句话说,它应该翻译成这样的东西:

代码语言:javascript
复制
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”时,请确保在云控制台中“注册应用程序”两次:

  1. 对于第一个,选择平台"Android“。这需要你的包裹名。
  2. 对于第二个选择,选择平台"Web“。这将给您一个Web客户端ID,但您也需要它为您的Android应用程序。( Consts.java文件需要"Web“,而不是"Android”。另一方面,您的MBS身份验证页面需要您的Android客户端ID以及Web客户端ID才能成功地使用Android应用程序进行身份验证)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19162330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档