GoogleJsonResponseException:404 Not Found使用谷歌应用程序端点引擎后端

时间:2013-03-22 06:17:22

标签: android google-app-engine google-cloud-endpoints

我按照下面的教程。

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;
        }
    }
}

6 个答案:

答案 0 :(得分: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>

答案 1 :(得分:5)

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

我有一个类似的问题,带有4个String参数的方法,我为其中一个发送了null,而我得到的只是一个愚蠢的404.

开发(本地)服务器上404的另一个可能原因是你有一个带有一些奇怪字符的参数(比如一个url),如果开发(本地)服务器在它上面正常工作,它就无法正确处理事件app引擎直播服务器。可能的解决方案:使用简单的java对象而不是多个params。

答案 2 :(得分:3)

我遇到了同样的问题,这就是我修复它的方法。

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

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

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

我不确定问题是什么,但我认为App Engine上的Web Server将所有请求重定向到版本1.可能是因为两个版本的web.xml中都有以下设置。

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:0)

这是因为您的部署后端未完全部署。只需重新部署后端,确保消息部署成功。您可以在首页标题上查看详细信息部署过程。另外,您可以通过访问网址进行测试来检查:

https://developers.google.com/apis-explorer/?base=https://[YOUR_PROJECT_ID].appspot.com/_ah/api#p/

答案 5 :(得分:0)

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