【问题标题】:404 Error when running TicTacToe sample (Android) against sample Google App Engine project (Java)针对示例 Google App Engine 项目 (Java) 运行井字游戏示例 (Android) 时出现 404 错误
【发布时间】:2025-12-14 04:15:01
【问题描述】:

我设置了 Android App 和 Google App Engine 后端,如这两个项目中所示:

  1. Android Connected App Engine Project
  2. Java App Engine Backend Project

当我单击触发请求的井字游戏按钮时,我收到 404 错误:“未找到”

04-09 23:11:51.115: W/TicTacToe(26247): GetComputerMoveTask: 404 Not Found
04-09 23:11:51.115: W/TicTacToe(26247): Not Found

这正是浏览器中 https://myappname.appspot.com/_ah/api/ 显示“未找到”的内容。

这是我所做的:

  1. App Engine Console上创建了一个api项目
  2. 创建了一个带有 com.google.devrel.samples.ttt 的 Android 客户端 ID 作为包和我的调试密钥 SHA1 指纹
  3. 创建了一个 Web 客户端 ID
  4. 在 Eclipse 中集成了 Android 项目。将 Tictactoe.java 中的 DEFAULT_ROOT_URL 更新为“https://myappname.appspot.com/_ah/api/”
  5. 通过将字符串“your_web_client_id”替换为第 3 步中生成的 web-client-id 来更新 ClientCredentials.java 中的 AUDIENCE 值
  6. 在 eclipse 中集成 Java 后端项目。将 appengine-web.xml 中的应用程序值更新为 myappname
  7. 更新了 /spi/Ids.java 中的值以反映 web-client-idandroid-client-id 从第 2 步和第 3 步开始
  8. web-client-id 更新了 war/js/render 中 google.devrel.samples.ttt.CLIENT_ID 的值
  9. 将后端部署到谷歌。效果很好 - 它打开了 https://myappname.appspot.com/ 页面,在部署后显示正确的页面(servlet)
  10. 部署了安卓应用程序并尝试在井字游戏中移动。应用崩溃。

我认为在我的 Android 应用中我的 DEFAULT_ROOT_URL 设置为“https://myappname.appspot.com/_ah/api/”非常可疑,而此页面在浏览器中只显示“未找到”。

这里出了什么问题?

提前致谢

【问题讨论】:

  • 想补充一点,日志也没有在控制台中显示任何访问权限。
  • Addiotianally apis-explorer.appspot.com/apis-explorer/?base=https://… 没有显示服务、所有版本和请求历史的条目?!!我还在 API 控制台中检查了最新版本是否设置为默认版本。我用 JRE 1.7 编译了后端。 google-play-services 项目取自 android-sdk-folder。我再次检查了 Android 客户端 ID 的 URL,Web 客户端 ID 和应用程序 ID 已正确设置和插入。
  • + 我只使用真实设备(没有模拟器),它只使用允许的帐户(在控制台中设置)。 Web 前端仍然可用。控制台在部署后显示成功消息。堆栈跟踪中的异常是:com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
  • ... 并再次检查了用于 Android Cleint ID 和设备部署的指纹。
  • 我通过重新设置项目解决了这个问题。我无法真正解释为什么它现在有效.. 无论如何谢谢大家...

标签: android google-app-engine http-status-code-404


【解决方案1】:

【讨论】:

  • 谢谢。实际上我什至导入了那个项目。就像在那里看到的那样,我在第 60 行的 TicTacToe.java 中填写了 。除了更改描述中显示的值之外,它是同一个项目。当我打电话给myappname.appspot.com/_ah/api/tictactoe/v1 时,它也会显示 404 -“未找到”。
  • 您的代码是否在我们可以查看的存储库中?如果您对此感到担忧,它当然可以删除任何私人或敏感信息 - 只需要逻辑即可。
  • 您还可以查看 App Engine 项目的日志吗?我相信您只是在查看来自 Android 系统的日志。转到 [Google Developers Console](console.developers.google.com),选择您的项目,然后导航到 Monitoring->Logs。寻找那里的任何错误,也许你(或我们)会跳出来。
【解决方案2】:

不知道您从哪里获得第 4 步的说明(在您的列表中),但是查看 Android 项目第 2 步中的Setup Instructions,您应该做的是:

更新src/com/appspot/api/services/tictactoe/Tictactoe.javaDEFAULT_ROOT_URL 的值以指向您托管井字游戏后端的位置(基于Java 后端示例)。

在您的情况下,位置显然是“https://myappname.appspot.com/”。

【讨论】:

  • 是的,在互联网上的示例代码中,我经常找到myappname.appspot.com/_ah/api。但我也试过myappname.appspot.com。这也会出现 404 错误,但在这种情况下,我在堆栈跟踪中看到了我的 servlet 示例页面的 html 代码。似乎这些 UIRL 上没有可用的 API。