2015-11-25 11 views
6

Nie mogłem znaleźć szczegółowej odpowiedzi na to pytanie, a przynajmniej takiego, którego nie rozumiem.Jak uzyskać i przeanalizować obiekt JSON za pomocą Volley

Próbuję skonfigurować Volley, aby usunąć obiekty JSON z iTunes. Następnie chcę przeanalizować obiekty, aby uzyskać adresy URL ich obrazów.

Tak na przykład, tutaj jest am iTunes obiekt JSON URL

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

Więc tutaj mam skonfigurować mój kod, aby uzyskać ten obiekt (za pomocą samouczka oczywiście)

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

ostatnie oświadczenie to

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

Przypuszczalnie teraz mam obiekt JSON? Ale jak mogę uzyskać do niego dostęp i parsować?

Odpowiedz

11

Z adresu URL, można użyć następującego przykładowego kodu:

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

Klasa 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; 
} 

Wewnątrz pliku build.gradle:

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

Nadzieja to pomaga!

+1

Pomogło! Dziękuję Ci bardzo. –

0

Po prostu wklej ten adres URL do swojej przeglądarki, możesz zobaczyć cały obiekt JSON. Możesz użyć strony json formatter, aby zobaczyć w ładnym formacie.

Zapoznaj się z metodami, których potrzebujesz. http://developer.android.com/reference/org/json/JSONObject.html

Twój kod nie działa, ponieważ te obiekty nie istnieją w tym jsonie.

0

Użyj GSON z prostymi POJO. Oto GSON Documentation

Załóżmy, że masz to:

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... 
} 

Można użyć GSON to zrobić:

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

A teraz masz obiektu reprezentującego odpowiedź! Zwróć uwagę, że nazwy pól obiektu "Song" mają te same nazwy co wartości, na których Ci zależy (w tym przypadku wygląda na to, że sieć i strona są tym, czego szukałeś). Gson wykonuje zadanie serializacji obiektu JSON do POJO, dzięki czemu można uzyskać bezpośredni dostęp do wartości w sposób czysty i łatwiejszy.

Aby przekonwertować z powrotem jest to tak proste, jak:

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

Wystarczy dodać do swojej build.gradle poprzez:

compile 'com.google.code.gson:gson:1.7.2' 
Powiązane problemy