2015-11-25 17 views
6

Tôi không thể tìm thấy câu trả lời chi tiết cho câu hỏi này, hoặc ít nhất không phải là câu trả lời tôi có thể hiểu được.Cách lấy và phân tích cú pháp đối tượng JSON bằng Volley

Tôi đang cố gắng thiết lập Volley để kéo xuống các đối tượng JSON từ iTunes. Sau đó tôi muốn phân tích cú pháp các đối tượng, để lấy URL hình ảnh của họ.

Vì vậy, ví dụ, đây là sáng iTunes JSON đối tượng URL

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

Vì vậy, ở đây tôi đã thiết lập mã của tôi để có được đối tượng này (sử dụng một hướng dẫn tất nhiên)

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

Các tuyên bố cuối cùng là

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

Có lẽ, bây giờ tôi có đối tượng JSON? Nhưng làm thế nào tôi có thể truy cập và phân tích nó?

Trả lời

11

Với Url của bạn, bạn có thể sử dụng mã mẫu sau:

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

Lớp 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; 
} 

Bên trong tập tin build.gradle:

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

Hope this helps!

+1

Nó đã giúp bạn! Cảm ơn nhiều. –

0

Chỉ cần dán url này vào trình duyệt của bạn, bạn có thể thấy tất cả đối tượng json. Bạn có thể sử dụng một trang web định dạng json để xem ở định dạng đẹp.

Hãy xem tại đây để tìm các phương pháp bạn cần. http://developer.android.com/reference/org/json/JSONObject.html

Mã của bạn không hoạt động vì đối tượng này không tồn tại trên json này.

0

Sử dụng GSON với POJO đơn giản. Đây là GSON Documentation

Giả sử bạn có này:

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

Bạn có thể sử dụng GSON để làm điều này:

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

Và bây giờ bạn có một đối tượng đại diện cho các phản ứng! Lưu ý cách tôi tạo tên trường của đối tượng "Bài hát" có cùng tên với các giá trị mà bạn quan tâm (trong trường hợp này nó xuất hiện mạng và trang web là những gì bạn muốn). Gson thực hiện công việc tuần tự hóa một đối tượng JSON thành POJO mà bạn có thể truy cập trực tiếp các giá trị một cách sạch sẽ và dễ dàng hơn.

Để chuyển đổi lại nó cũng đơn giản như:

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

Chỉ cần thêm vào build.gradle của bạn thông qua:

compile 'com.google.code.gson:gson:1.7.2' 
Các vấn đề liên quan