5

私はAppEngineの中に以下の方法があります:AndroidのAsyncTaskでGoogleクラウドエンドポイントEOFExceptionでは

@ApiMethod(name = "authed", path = "greeting/authed") 
public HelloGreeting authedGreeting(User user) { 
    ... 
} 

マイdoInBackgroundメソッド:

HelloGreeting hg = null; 
try { 
    hg = service.authed().execute(); 
} catch (IOException e) { 
    Log.d("error", e.getMessage(), e); 
} 
return hg; 

を私はFFのエラーが発生しました:では

/_ah/api/.../v1/greeting/authed: java.io.EOFException 

をlogcat:

Problem accessing /_ah/api/.../v1/greeting/authed. Reason: INTERNAL_SERVER_ERROR 
    at java.util.zip.GZIPInputStream.readUByte 
    at java.util.zip.GZIPInputStream.readUShort 
    at java.util.zip.GZIPInputStream.readUShort 

非認証メソッドを呼び出すときのみ機能します。それを修正するには?

ローカルサーバーを使用しています。

+0

は、ローカルサーバーに対して、このですか? –

+0

はい、ローカルサーバー。 –

答えて

7

値を挿入するための呼び出し時に同様の問題が発生していました。私は認証を使用していないため、私はわずかに異なりますが、同じ例外が発生していました。私はappengine-java-sdk-1.8.8を使用しています。私はこのエラーを持つ他のエンドポイント呼び出しを行うことができました。私は生成されたコードを見て、私は働いているコールと非稼働のコールを見た違いは、HttpMethodでした。失敗したコールは"POST"と定義されました。 @ApiMethodアノテーションのアノテーション属性httpMethod=ApiMethod.HttpMethod.GETを使用してこれを変更できました。

@ApiMethod(httpMethod = ApiMethod.HttpMethod.GET, name = "insertUserArtist", path = "insertUserArtist") 

私は、クライアントのコードを再生成し、私は恐ろしいEOFExceptionを得ることなく電話をかけることができました。なぜPOSTが正しく動作しないのかわかりませんが、GETに変更するとうまくいきました。これはおそらく、どのくらいの量のデータが送信され、対処されるべきか(おそらく図書館の問題)に関するいくつかの質問を提示するでしょう。私は、Googleに提出するデモンストレーションアプリの作成について検討します。

+3

これがなぜ機能するのか誰でも知っていますか? – sauce

0

「エンティティ」オブジェクトを渡した場合、POSTが機能します。プリミティブデータ型を渡している場合は、HttpMethod.GETを使用することに固執します。

0

ローカル開発サーバーで実行している場合は、 次のスニペットをMyApi.Builderに追加して、root urlを設定した後で正しく設定します。

.setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() { 
       @Override 
       public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException { 
        abstractGoogleClientRequest.setDisableGZipContent(true); 
       } 
      }) 

出典:https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/HelloEndpoints

関連する問題