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

この問題の別の考えられる原因は、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 に答える
5

404 のもう 1 つの考えられる理由は、メソッドを null パラメーターで呼び出し、メソッドが null パラメーターを受け入れない場合です。

4 つの文字列パラメーターを持つメソッドで同様の問題が発生し、そのうちの 1 つに対して null を送信しましたが、得られたのは愚かな 404 だけでした。

開発 (ローカル) サーバーでの 404 のもう 1 つの考えられる理由は、アプリケーション エンジン ライブで正常に動作する場合、開発 (ローカル) サーバーがイベントを正しく処理しないという奇妙な文字 (URL など) を含むパラメーターがあることです。サーバー。考えられる解決策: 複数のパラメーターの代わりに、単純な Java オブジェクトを使用します。

于 2015-04-16T13:59:23.560 に答える
3

私は同じ問題を抱えていましたが、これが私がそれを修正した方法です。

ちょっとした背景
私は 2 つのバージョンの 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 に答える