Как получить и разобрать JSON-объект с помощью Volley

Я не смог найти подробный ответ на этот вопрос или, по крайней мере, не тот, который я могу понять.

Я пытаюсь настроить Volley на посадку JSON-объектов из iTunes. Затем я хочу проанализировать объекты, чтобы получить их URL-адреса изображений.

Так, например, вот URL-адрес объекта iTunes JSON

String url = "https://itunes.apple.com/search?term=michael+jackson"; 

Итак, здесь я настроил свой код, чтобы получить этот объект (с помощью учебника, конечно)

 String url = "https://itunes.apple.com/search?term=michael+jackson"; JsonObjectRequest jsonRequest = new JsonObjectRequest (Request.Method.GET, url, null, new Downloader.Response.Listener // Cannot resolve symbol Listener <JSONObject>() { @Override public void onResponse(JSONObject response) { // the response is already constructed as a JSONObject! try { response = response.getJSONObject("args"); String site = response.getString("site"), network = response.getString("network"); System.out.println("Site: "+site+"\nNetwork: "+network); } catch (JSONException e) { e.printStackTrace(); } } }, new Downloader.Response.ErrorListener // Cannot resolve symbol ErrorListener () { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); Volley.newRequestQueue(this).add(jsonRequest); 

Последнее утверждение

 Volley.newRequestQueue(this).add(jsonRequest); 

Предположительно, теперь у меня есть JSON-объект? Но как я могу получить доступ и проанализировать его?

С помощью вашего Url вы можете использовать следующий пример кода:

  RequestQueue requestQueue = Volley.newRequestQueue(this); String url = "https://itunes.apple.com/search?term=michael+jackson"; JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { if (response != null) { int resultCount = response.optInt("resultCount"); if (resultCount > 0) { Gson gson = new Gson(); JSONArray jsonArray = response.optJSONArray("results"); if (jsonArray != null) { SongInfo[] songs = gson.fromJson(jsonArray.toString(), SongInfo[].class); if (songs != null && songs.length > 0) { for (SongInfo song : songs) { Log.i("LOG", song.trackViewUrl); } } } } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("LOG", error.toString()); } }); requestQueue.add(jsonObjectRequest); 

Класс SongInfo:

 public class SongInfo { public String wrapperType; public String kind; public Integer artistId; public Integer collectionId; public Integer trackId; public String artistName; public String collectionName; public String trackName; public String collectionCensoredName; public String trackCensoredName; public String artistViewUrl; public String collectionViewUrl; public String trackViewUrl; public String previewUrl; public String artworkUrl30; public String artworkUrl60; public String artworkUrl100; public Float collectionPrice; public Float trackPrice; public String releaseDate; public String collectionExplicitness; public String trackExplicitness; public Integer discCount; public Integer discNumber; public Integer trackCount; public Integer trackNumber; public Integer trackTimeMillis; public String country; public String currency; public String primaryGenreName; public String radioStationUrl; public Boolean isStreamable; } 

Внутри файла build.gradle:

 compile 'com.mcxiaoke.volley:library:1.0.19' compile 'com.google.code.gson:gson:2.5' 

Надеюсь это поможет!

Просто вставьте этот url в свой браузер, вы можете увидеть весь объект json. Вы можете использовать сайт json formatter для просмотра в хорошем формате.

Посмотрите здесь, чтобы найти нужные вам методы. http://developer.android.com/reference/org/json/JSONObject.html

Ваш код не работает, потому что эти объекты не существуют в этом json.

Используйте GSON с простым POJO. Вот документация GSON

Предположим, у вас есть это:

  public class Song{ private String site; private String network; public void setSite(String site){ this.site = site; } public void setNetwork(String network{ this.network = network; } //Add getters as well... } 

Вы можете использовать GSON для этого:

 Song song = Gson.fromJson(response.getJSONObject("args"), Song.class); 

И теперь у вас есть объект, представляющий ответ! Обратите внимание на то, как я создал имена полей объекта «Песня», имеют те же имена, что и значения, о которых вы заботитесь (в этом случае он выглядит как сеть, а сайт – то, что вы хотели). Gson выполняет сериализацию объекта JSON на POJO, чтобы вы могли напрямую получать доступ к значениям чисто и проще.

Чтобы конвертировать назад, это просто:

 JSONObject obj = new JSONObject(gson.toJson(song)); 

Просто добавьте свой build.gradle через:

 compile 'com.google.code.gson:gson:1.7.2' 
Intereting Posts
Несоответствие размера изображения Xamarin Лучший способ обмена кодами между iOS и Android Запустить задачу Async в рабочем потоке Оптимальная практика подключения TCP к TCP Как я могу раздавать бесплатные просмотренные копии моего платного приложения для Android? Использование adb logcat с реальным телефоном (а не с эмулятором) Применение Proguard к существующему приложению в Google Play Как получить растровое изображение (кадры) из видео с помощью MediaCodec Откройте Activity A и загрузите определенный фрагмент Activity A FROM Activity B Получить объект JSON из ответа HTTP Постоянная сила сигнала Bluetooth LE на Android Как WhatsApp может быть сквозным зашифрованным, когда WhatsApp Web все еще работает Android M onRequestPermissionsResult в неактивности Виджет исчезает каждый раз, когда приложение обновляется на устройствах Samsung Как отключить проверку заголовка WWW-Authenticate на 401 в HttpUrlConnection на Android?