6

我按照下面的教程进行操作。

https://developers.google.com/eclipse/docs/running_and_debugging_2_0

这基本上为我现有的应用程序添加了一个 GAE 后端。然后我尝试下面的示例,在本地开发服务器上运行它,我得到下面发生的异常

Note result = endpoint.insertNote(note).execute();

叫做。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found

我的代码如下。

package com.cloudnotes;

import java.io.IOException;
import java.util.Date;

import android.os.AsyncTask;
import android.content.Context;
import com.cloudnotes.noteendpoint.Noteendpoint;
import com.cloudnotes.noteendpoint.model.Note;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.json.jackson.JacksonFactory;


import android.os.Bundle;
import android.app.Activity;

import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

      new EndpointsTask().execute(getApplicationContext());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public class EndpointsTask extends AsyncTask<Context, Integer, Long> {
        protected Long doInBackground(Context... contexts) {

          Noteendpoint.Builder endpointBuilder = new Noteendpoint.Builder(
              AndroidHttp.newCompatibleTransport(),
              new JacksonFactory(),
              new HttpRequestInitializer() {
              public void initialize(HttpRequest httpRequest) { }
              });
      Noteendpoint endpoint = CloudEndpointUtils.updateBuilder(
      endpointBuilder).build();
      try {
          Note note = new Note().setDescription("Note Description");
          String noteID = new Date().toString();
          note.setId(noteID);

          note.setEmailAddress("E-Mail Address");      
          Note result = endpoint.insertNote(note).execute();
      } catch (IOException e) {
        e.printStackTrace();
      }
          return (long) 0;
        }
    }
}
4

6 回答 6

5

如果您使用空参数调用该方法并且该方法不接受空参数,则另一个可能的 404 原因。

我在使用 4 个字符串参数的方法时遇到了类似的问题,我为其中一个发送了 null,我得到的只是一个愚蠢的 404。

开发(本地)服务器上出现 404 的另一个可能原因是您有一个带有一些奇怪字符(例如 url)的参数,如果开发(本地)服务器在应用程序引擎上运行正常,则无法正确处理事件服务器。可能的解决方案:使用简单的 java 对象代替多个参数。

于 2015-04-16T13:59:23.560 回答
5

此问题的另一个可能原因是未在 appengine-web.xml 中设置正确的 applicationId:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>APPLICATION_ID_HERE</application>

...

</appengine-web-app>
于 2015-04-05T04:40:59.010 回答
3

这归结为应用引擎默认版本与您部署的不同。转到此处: https ://appengine.google.com/deployment?app_id=s~your-project-id 并更改您的默认版本

于 2014-02-11T12:01:43.950 回答
3

我有同样的问题,这就是我解决它的方法。

一点背景知识
我有两个版本的 API 部署到 App Engine,我相信应该没问题。管理控制台没有显示任何问题,在日志文件中部署 API 的第 2 版后,我得到了200 OK代码。

/_ah/spi/BackendService.getApiConfigs 200 118ms 8kb

但无论我尝试什么,我总是收到404 Not Found错误。

我不确定问题出在哪里,但我认为 App Engine 的 Web 服务器正在将所有请求重定向到版本 1。这可能是因为两个版本的 web.xml 中都有以下设置。

<servlet-mapping>
  <servlet-name>SystemServiceServlet</servlet-name>
  <url-pattern>/_ah/spi/*</url-pattern>
</servlet-mapping>

解决方案
我删除了版本 1 并重新部署了版本 2。然后一切正常。

于 2013-08-11T05:11:24.830 回答
0

发生这种情况是因为您的部署后端未完全部署。只需重新部署您的后端并确保您收到消息部署成功。您可以在首页标题上查看详细部署过程。另外,您可以通过访问 url 进行测试以检查:

https://developers.google.com/apis-explorer/?base=https://[YOUR_PROJECT_ID].appspot.com/_ah/api#p/
于 2013-06-23T16:04:38.323 回答
0

尝试将您的插件和依赖库更新到最新版本。请参阅https://stackoverflow.com/a/37639701/857346

于 2016-06-05T08:01:10.187 回答