Использование сетевой библиотеки для извлечения JSON
Вопрос
Я не часто работаю с JSON, но у меня возникли некоторые проблемы с тем, чтобы сделать это на Android без других библиотек.я наткнулся на Ион от Коуша и я хотел бы использовать его для получения данных о погоде в Лондоне.API JSON, который я буду использовать, взят из OpenWeather здесь.Насколько я могу судить, JSON действителен, поэтому теперь я застрял на стороне Android.Моя конечная цель - иметь объект/строку, сообщающую о Лондоне. Main > temp
.Это мой код Android, но я не знаю, что делать дальше.Есть идеи?
private void getTemperature() {
Log.d(TAG, "2");
final JsonObject json = new JsonObject();
Ion.with(this, "http://api.openweathermap.org/data/2.5/weather?q=London,uk")
.asJsonObject().setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
// do stuff with the result or error
Log.d("TAG", "Complete");
//json = result;
}
});
}
Мой код попадает в оператор журнала «Завершение», но теперь я пытаюсь установить результат для моего созданного мной json-объекта, поэтому я удаляю комментарий //json = result
, но я получаю сообщение об ошибке в Eclipse.Любая помощь?Я хотел бы, чтобы этот метод просто выводил Main -> Temp
что (на данный момент) составляет 284,51.
Решение
Типичное использование ионов является асинхронным, но имеет синхронную поддержку.Вместо использования setCallback (async) используйте get() (sync), чтобы вернуть его синхронно.Однако это заблокирует вашу текущую тему.
final JsonObject json = Ion.with(this, "http://api.openweathermap.org/data/2.5/weather?q=London,uk")
.asJsonObject().
.get();
Другие советы
Поскольку вы пометили переменную json как окончательную, я не думаю, что вы сможете переназначить ее до той точки, которая приведет к созданию метода onCompleted().
Я бы рекомендовал создать AsyncTask с HttpClient, чтобы фактически получить JSON.Я думаю, это было бы проще и чище.
Пример HttpClienthttp://www.mkyong.com/java/apache-httpclient-examples/
Если вы хотите на самом деле проанализировать JSON, я бы порекомендовал пакет Google GSON.