2010-10-13 2 views
4

Я написал веб-приложение для работы в Google AppEngine с использованием среды Restlet, обмениваясь с помощью json с веб-клиентами. Они работают так, как ожидалось. Тем не менее, один конкретный ресурс, написанный для ответа на клиент Android, не работает при доступе через Android. Однако он работает при доступе через веб-браузер (я не отправляю параметры запроса из браузера и, таким образом, получаю 400, что в этом случае нормально).Проблемы с запущенными приложениями в Google AppEngine

Этот код работает при запуске на 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-клиент, сервер Безразлично» t напишите любые сообщения журнала, которые указывают, что запрос туда не поступает.

+0

Приложения, не реагирующие на App Engine, обычно вызваны неверно сконфигурированными описаниями app.yaml и/или отсутствующими обработчиками. Можете ли вы включить их обоих здесь? Это поможет диагностировать проблему. – Greg

+0

Вы пробовали мои тесты? – Panthro

ответ

0

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

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

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

Если это работает, и вы получите ваш expeted 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); 

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

Смежные вопросы