0

Android アプリで GAE を使用して特定のエンティティを取得しようとすると、次のエラーが発生します (一部のみ、その他は完全に機能します)。エラーは次のとおりです。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error
{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Internal Error",
    "reason" : "internalError"
  } ],
  "message" : "Internal Error"
}
com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error
{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Internal Error",
    "reason" : "internalError"
  } ],
  "message" : "Internal Error"
}
{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Internal Error",
    "reason" : "internalError"
  } ],
  "message" : "Internal Error"
}
500 Internal Server Error
{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Internal Error",
    "reason" : "internalError"
  } ],
  "message" : "Internal Error"
}
{"code":500,"errors":[{"domain":"global","message":"Internal Error","reason":"internalError"}],"message":"Internal Error"}

このリンクの一番上の回答からログを追加しようとしましたが、それも機能しませんでした (Cloud Console にログが投稿されていないか、少なくとも私が作成しようとしていたログはありません)。私のエンティティクラスのテーマは次のように定義されています:

public class ZooperTheme {
    @Id
    private String themeID;
    public String creator;
    public String date;
    public String address;
    public int version;
    public String name;
    public int size;
    public int downloads;
    public int favorites;
    public int hides;
    public int popularity;
    public int errors;
    public String items;

それぞれに適切なゲッター/セッターがあります。themeID は、1、2、3 などで始まる Long で、文字列に変換されます。次のコードを使用すると、すべてが完全に機能します (すべてのテーマ情報がダウンロードされ、SQL データベースに変換されます。

themeendpoint.Builder endpointBuilder = new themeendpoint.Builder(
        AndroidHttp.newCompatibleTransport(),
        new JacksonFactory(),
        new HttpRequestInitializer() {
            public void initialize(HttpRequest httpRequest) { }
        });
endpointBuilder.setApplicationName(mCtx.getString(R.string.app_name));
themeendpoint endpoint = CloudEndpointUtils.updateBuilder(
        endpointBuilder).build();
DbAdapter dbAdapter = new DbAdapter(mCtx);
dbAdapter.openWrite();
dbAdapter.wipeThemeData();
try {
    CollectionResponseTheme response = endpoint.listTheme().execute(); 
    List<Theme> listResponse = response.getItems();

    for (Theme zt : listResponse) {

        String themeID = zt.getThemeID();
        String creator = zt.getCreator();
        String date = zt.getDate();
        String address = zt.getAddress();
        int version = zt.getVersion();
        String name = zt.getName();
        int size = zt.getSize();
        int popularity = zt.getPopularity();
        String items = zt.getItems();
        if (!(items != null)) {
            items = "";
        }
        dbAdapter.insertTheme(themeID, creator, date, address, "" + version, name, "" + size, "" + popularity, items);
    }

ただし、同じコードを使用して上記のエンドポイントを作成しようとすると、次のことを試してください。

    Theme theme2 = endpoint.getTheme("2").execute();
    Theme theme1 = endpoint.getTheme("1").execute();

theme2 は完璧に動作しますが、theme1 は 500 コード エラーになります! 2 つの唯一の違いは、テーマ "1" の項目列には情報 (文字列 "test" のみ) があり、テーマ "2" はその列では空白であることです。それ以外には違いはありません。これを他のテーマ ID でテストしたところ、Items 列が空白の場合はコードが機能し、何かが含まれている場合はコード 500 が表示されます。ここで何が起こっている可能性がありますか?

4

1 に答える 1

0

それで、私は最終的にそれを機能させました。問題を解決したことはありませんが、次の方法で解決しました。

  1. パブリック API の下の資格情報ページにパッケージ/SHA1 を追加します (アクセスの問題ではなかったので、これが何かをしたとは思えません。"

  2. すべてを捨てて、新しいエンティティの下でデータベースを再アップロードしました。その後、問題は(まだ)再び現れませんでした。

于 2014-02-06T02:06:44.513 に答える