https://developers.google.com/cloud/samples/mbs/deploy_backendのガイドに従って、Google のモバイル バックエンド スターターをデプロイしました 。
これらの手順でクライアントを使用してテストしたところ、正常に動作しました。
今、私はからクライアントをダウンロードしました
https://github.com/bradabrams/GeekSerendipity-io13
の手順に従いました
ステップ 3 まで。これまでのところ、地図上に自分の位置が正しく表示されている地図を見ることができます。ただし、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)
なぜこの例外が発生するのですか?
私がチェックしたこと:
Consts.java のプロジェクト ID とプロジェクト番号は正しいです。
Android マニフェストをチェックして、Maps API キーが正しいことを確認しました
コード コンソールで Maps API キーに指定されたパッケージ名は正しいです: ;com.turbomanage.sample.geekwatch
Appengine バックエンドは、単独で正常に動作しています。API エクスプローラーのリンクは次のとおりです。
認証は「OPEN」に設定されているため、何らかの理由でブロックされることはありません。
https://developers.google.com/cloud/samples/mbs/android/に記載されている Android サンプル アプリに対してバックエンドをテストしたためです。バックエンドは正常に動作しているようです。ほとんどの場合、これは Geek Serendipity クライアントが間違ったパラメーターを渡した場合のようです。
Eclipse でコードを調べて、CloudQuery と QueryDto がどのように見えるかを確認しました。
クラウドクエリ:
CloudQuery (Geek/PAST): filter: F: op: EQ, values: [name, null]
クエリ先:
{filterDto={operator=EQ, values=[name, null]}, kindName=Geek, limit=1, regId=APA91bHtELzN0oF2ZtUa91epD7gzxtM8R7EUP7O7w_9ebCxT7bEFbWO9CEhmkulOayXkJ8zRz1eXehfh-ZD4Mru0bug7nbnolrDdzOlbN5orsixKUyyZtMyHOy7MHNfA46gFQEWfvo9FQdCe8fsZ1qlumuyybSgQJw, scope=PAST, sortAscending=false, sortedPropertyName=name}
ここでの問題は values:[name, null] にあると思われます。しかし、これ以上解読できません。このクエリは実際にはどのように見えるべきでしょうか?
アプリの説明に基づいて、ここで利用可能なすべての「Geek」インスタンスをクエリしてマップに表示しようとしている可能性がありますが、Google が提供するこのサンプル コードを詳しく知らないため、そうであるかどうかはわかりません。(私はEndPointsも初めてなので、Geek Serendipityアプリをスターターとして試しています)
また、この時点で、データストアには「Geek」タイプのインスタンスが 0 個あります。
これをデバッグするのに役立つポインタがあれば、本当に感謝しています。
更新: API エクスプローラーから同じクエリを試しました。HTTP 200 OK が返されますが、AppEngine ログにはまだ例外が表示されます。
実際、クエリから {filterDto={operator=EQ, values=[name, null]} を削除しても、ログにエラーが表示されます。
これは無害なバグであり、不必要に心配しているのだろうかと思い始めています。残りの手順を続行し、他に問題が発生するかどうかを確認します。