我编写了一个使用Restlet框架在Google AppEngine上运行的Web应用程序,使用json与Web客户端进行通信。那些工作按预期进行。但是,通过Android访问时,为Android客户端提供响应而编写的一个特定资源不起作用。但是,它通过Web浏览器访问时确实有效(我不从浏览器发送请求参数,因此获得400,在这种情况下是正常的。)
此代码在DevAppServer上运行时起作用:
public class PlayResource extends ServerResource {
private final float SCOREBASE = 1000.0F;
@Get
@Post
public JsonRepresentation play() {
try {
JsonRepresentation rep = new JsonRepresentation(getRequestEntity());
JSONObject inputJson = rep.getJsonObject();
JSONObject outputJson = new JSONObject();
String country = inputJson.optString("country");
outputJson.put("country", doSomething("country",country));
......
......
return new JsonRepresentation(outputJson);
} catch (IOException e) {
try {
setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
return new JsonRepresentation(
new JSONObject()
.put(Messages.TYPE_ERROR, Messages.BAD_REQUEST));
} catch (JSONException e2) {
setStatus(Status.SERVER_ERROR_INTERNAL);
return null;
}
} catch (JSONException e) {
try {
setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
return new JsonRepresentation(
new JSONObject()
.put(Messages.TYPE_ERROR, Messages.BAD_FORMAT));
} catch (JSONException e2) {
setStatus(Status.SERVER_ERROR_INTERNAL);
return null;
}
}
}
}
并且客户端Android设备正在运行此代码:
Client client = new Client(Protocol.HTTP);
try {
JsonRepresentation requestJSON = new JsonRepresentation(new JSONObject()
.put("country", country.trim())
);
Request req = new Request(Method.GET,"http://****.appspot.com/resource/play",requestJSON);
Response resp = client.handle(req);
String res = resp.getEntity().getText();
JSONObject resultJSON = new JSONObject(res);
运行此请求只会挂起Android客户端,服务器不会写任何日志消息,表明请求没有到达那里。
答案 0 :(得分:0)
似乎它更像是一个Appengine / Java问题而不是android问题,但是......让我们试试别的东西:
而不是使用客户端和您正在使用的东西,首先只是尝试查看服务器响应最简单的连接(就像在Web浏览器中一样):
URL url;
try {
url = new URL("http://yourappid.appspot.com/resource/play");
String content = (String) url.getContent();
System.out.println(content);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果它有效并且你得到你的费用400,如果是这样的话...尝试发送一个带有数据的httppostrequest ...像这样:
HttpClient client = new DefaultHttpClient();
HttpUriRequest httpRequest = new HttpPost("http://yourappid.appspot.com/resource/play");
//set the content type to json
httpRequest.setHeader("Content-Type", "application/json");
//get and work with the response
HttpResponse httpResponse = client.execute(httpRequest);
如果答案有用,请告诉我