2013-04-29 2 views
2

Я пытаюсь использовать google-http-java-клиент на android и анализировать ответы JSON с моего сервера. , делают это я использую следующий код (при условии, примерами проекта)google-http-java-client json update существующий объект

private static final HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport(); 
    private static final JsonFactory JSON_FACTORY = new JacksonFactory(); 
    HttpRequestFactory requestFactory = HTTP_TRANSPORT 
       .createRequestFactory(new HttpRequestInitializer() { 
        @Override 
        public void initialize(HttpRequest request) { 
         request.setParser(new JsonObjectParser(JSON_FACTORY)); 
        } 
       }); 
    HttpRequest request = requestFactory.buildGetRequest(new GenericUrl(url + paramsList)); 
    HttpResponse response = request.execute(); 

и все работает отлично подходит для новых объектов с

result = response.parseAs(PxUser.class); 

, но мне нужно обновить существующие объект с данными из строки json. с jackson только я могу использовать следующий код, но с клиентом google я не могу найти какое-либо решение.

InputStream in = -get-http-reponse- 
ObjectMapper mapper = new ObjectMapper(); 
ObjectReader reader = mapper.readerForUpdating(MySingleton.getInstance()); 
reader.readValue(InputStream in); 

, так что мне нужен способ обновить существующий объект, как с помощью этого примера Джексона, но с помощью клиента.

есть ли способ? мне нужно использовать jackson-databind.jar? как я могу это сделать? заранее спасибо

PS: я могу переключаться не gson, если его необходимо, никаких проблем

+1

Вы можете захотеть пометить это как java для улучшения видимости –

ответ

0

Это зависит от любой конечной точке приема вызова API, и что он ожидает запрос выглядеть.

Google HTTP Java Client просто обрабатывает процессы, такие как вызов, кодирование и декодирование объекта, экспоненциальное отключение и т. Д. Для вас. Это зависит от вас, чтобы создать запрос, который делает то, что вы хотите, и как сервер ожидает его просмотра.

Вероятно, API, с которым вы делаете запрос, ожидает, что обновление объекта будет выполнено с запросом PUT. Обновленный объект, скорее всего, будет содержимым запроса, закодированным в определенном формате. Предположим, JSON, поскольку вы разбираете ответы JSON. Итак, для примера, предположим, вы собираетесь запросить объект, изменить его, а затем отправить его обратно.

Во-первых, вы получаете ресурс и разобрать его в объект:

PxUser myUser = response.parseAs(PxUser.class); 

Затем вы изменяете объект как-то

myUser.setName("Frodo Baggins"); 

Теперь вы хотите, чтобы отправить его обратно на сервер как JSON объект в запросе PUT:

// httpbin.org is a wonderful URL to test API calls against as it returns whatever if received. 
GenericUrl url = new GenericUrl("http://httpbin.org/put"); 
JsonHttpContent content = new JsonHttpContent(new JacksonFactory(), myUser); 
HttpRequest request = requestFactory.buildPutRequest(url, content); 
HttpResponse response = request.execute(); 
System.out.println(response.parseAsString()); 

Спецификация того, как вы кодируете и обновляете свой контент, полностью u p для вас и спецификации API. Это особенно удобно, если вы также создаете сервер, получающий вызов.

Если вы работаете с существующим API, вы можете обновить вопрос с помощью конкретной проблемы (API «x» требует ответа, который похож на Blah, как это сделать в google-http- Java-клиент).

Если вы работаете с API Google, вы захотите использовать google-api-java-client, который сделает все это для вас.

+0

эй, спасибо за ваш ответ, но я думаю, что вы ошибаетесь.Я не пытаюсь обновить объект на сервере - я хочу проанализировать ответ на существующий объект в приложении. 1. создать объект java с некоторыми данными 2. Запрос GET серверу 3. разобрать ответ JSON с дополнительными данными В мой существующий объект java – hardysim

+0

Извините, похоже, что я ошибался. Вы изменяете существующий объект Java, а не ресурс на сервере? Я не думаю, что использование case явно обрабатывается, но вы можете расширить парсер JSON низкого уровня, чтобы сделать это для вас. –

+0

Привет, как я могу получить объект JacksonFactory()? –