Проблемы с запуском развернутых приложений в Google AppEngine - PullRequest
4 голосов
/ 13 октября 2010

Я написал веб-приложение для запуска в Google AppEngine с использованием среды Restlet, взаимодействующей с помощью json с веб-клиентами.Те работают как ожидалось.Однако один конкретный ресурс, написанный для предоставления ответа клиенту Android, не работает при доступе через Android.Однако он работает при доступе через веб-браузер (я не отправляю параметры запроса из браузера и, таким образом, получаю 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 голосов
/ 26 апреля 2011

Кажется, что это больше проблема Appengine / Java, чем проблема Android, но ... давайте попробуем что-то другое:

вместо того, чтобы использовать Client и то, что вы используете, сначала попробуйте посмотреть, что сервер отвечает на простейшее соединение (как вы делаете в веб-браузере):

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

Дайте мне знать, был ли ответ полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...