这个bug有点神秘。我有一个返回List<String>
的Google-Cloud-Endpoint方法。在退出方法之前,我将字符串的内容记录为
LOG.info(“list has: " + results);
当我检查app-engine的日志时,我看到了打印输出。
现在在android端,我将内容读取为
StringCollection collection = service.getResults().execute();
根据android LogCat,这一行抛出了一个异常,指责服务器返回一个500错误:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error
{
"code": 500,
"errors": [
{
"domain": "global",
"message": "Internal Error",
"reason": "internalError"
}
],
"message": "Internal Error"
}
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1045)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
at com.business.game.pack.ServerCall$2.doInBackground(ServerCall.java:189)
at com.business.game.pack.ServerCall$2.doInBackground(ServerCall.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
我不确定如何修复这个错误,因为它似乎超出了我的实际代码。
其他尝试:
用于返回CollectionResponse.<String> builder().setItems(results).build()
的端点。我把它改成简单的result
作为故障排除,但这没有帮助。所以现在方法签名(仍然失败)是
@ApiMethod(name = "getResults", httpMethod = HttpMethod.GET)
public List<String> getResults() {
LOG.info(“Into getResults");
//… more code
LOG.info(“list has: " + results);
return results;// CollectionResponse.<String> builder().setItems(results).build();
}
谢谢你的帮助
答案是相当蹩脚的,我希望谷歌人解决这个问题。显然,不能使用String或String的集合作为返回类型。因此,以下任何操作都将失败:
return result;//String
return results;//List<String>
return CollectionResponse.<String> builder().setItems(results).build();
必须创建一个包装器,该包装器将字符串或其集合作为字段;一个基本POJO。
这浪费了我整整10个小时的时间。我希望这能为下一个女孩/男孩节省一些麻烦。