在Google AppEngine上运行已部署的应用程序的问题

时间:2010-10-13 15:28:07

标签: android google-app-engine

我编写了一个使用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客户端,服务器不会写任何日志消息,表明请求没有到达那里。

1 个答案:

答案 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);

如果答案有用,请告诉我