2014-01-15 55 views
0

在這裏,我正在讀取從youtube到java的json值。 我得到的值正確,除了縮略圖數據而獲得的縮略圖對象值我得到java.lang.NullPointerException從json讀取值到java對象時的java.lang.NullPointerException

public class JsonVideoDetais { 

    public static void main(String... args) { 
     BufferedReader reader = null; 
     StringBuilder buffer = null; 
     try { 
      String link = "https://gdata.youtube.com/feeds/api/videos/" + "aa_wFClyiVE" + "?v=2&alt=jsonc"; 
      URL url = new URL(link); 
      reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); 
      buffer = new StringBuilder(); 
      int read; 
      char[] chars = new char[1024]; 
      while ((read = reader.read(chars)) != -1) { 
       buffer.append(chars, 0, read); 
      } 
     } catch (Exception e) { 

     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (IOException ex) { 
        Logger.getLogger(JsonVideoDetais.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     } 

     videoDetails data; 
     data = new Gson().fromJson(buffer.toString(), videoDetails.class); 
     System.out.println(data.getData().getTitle()); 
     System.out.println(data.getData().getTn().getHqDefault()); 
     System.out.println(data.getData().getTn().getSqDefault()); 
    } 
    } 


class videoDetails { 

    private Data data; 

    public Data getData() { 
     return data; 
    } 

    public void setData(Data data) { 
     this.data = data; 
    } 

    public String toString() { 
     return String.format("data:%s", data); 
    } 
    } 



class Data { 

    private String id; 
    private String title; 
    private String description; 
    private int duration; 
    private Thumbnail tn; 

    public Thumbnail getTn() { 
     return tn; 
    } 

    public void setTn(Thumbnail tn) { 
     this.tn = tn; 
    } 

    public int getDuration() { 
     return duration; 
    } 

    public void setDuration(int duration) { 
     this.duration = duration; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String toString() { 
     return String.format("title:%s,id:%s,description:%s,tn:%s,duration:%d", title, id, description, tn, duration); 
    } 
} 



class Thumbnail { 

    private String sqDefault; 
    private String hqDefault; 

    public String getSqDefault() { 
     return sqDefault; 
    } 

    public void setSqDefault(String sqDefault) { 
     this.sqDefault = sqDefault; 
    } 

    public String getHqDefault() { 
     return hqDefault; 
    } 

    public void setHqDefault(String hqDefault) { 
     this.hqDefault = hqDefault; 
    } 

    public String toString() { 
     return String.format("sqDefault:%s,hqDefault:%s", hqDefault, sqDefault); 
    } 
} 

我得到以下異常

Exception in thread "main" java.lang.NullPointerException 
    at utility.JsonVideoDetais.main(JsonVideoDetais.java:52) 

同時呼籲

System.out.println(data.getData().getTn().getHqDefault()); 
      System.out.println(data.getData().getTn().getSqDefault()); 

如果WLL看到這個link。它是有價值的sqDefaulthqDefault

我想取值sqDefaulthqDefault。 如何做到這一點。

+1

和線是52? – chrylis

+0

'System.out.println(data.getData()。getTn()。getHqDefault());' –

+0

* Something * is'null'。將鏈接調用拆分爲具有臨時變量的單獨行,並查看哪個是「null」。它看起來像'getTn()'返回'null'。 – chrylis

回答

2

在你的Data類中,我創建了一個像這樣的對象。我猜Thumbnail對象被設置爲縮略圖,tn也不適合我。

private Thumbnail thumbnail;// instead of tn 

並將所得輸出是: -

Blood Glucose Hindi - Dr. Anup, MD Teaches Series 
https://i1.ytimg.com/vi/aa_wFClyiVE/hqdefault.jpg 
https://i1.ytimg.com/vi/aa_wFClyiVE/default.jpg 
+0

這是工作,問題是什麼 –

+0

你的gdata中不存在「tn」,你可以看到前面提到過的微博李,但是你可以看到縮略圖。這與JPA或hibernate工具中POJO表的POJO類似,應在POJO中使用相同的列名稱作爲varibale名稱。同樣在這裏也是。 –

1

使用調試器找出哪個對象爲null是解決您的問題的最快方法。

OR

查找與下面的代碼返回null值:

System.out.println(data); 
System.out.println(data.getData()); 
System.out.println(data.getData().getTn()); 

--The下列文字是新增---------------- -

那麼,我已經在我的筆記本電腦上運行你的程序,並且似乎https://gdata.youtube.com/feeds/api/videos/aa_wFClyiVE?v=2&alt=jsonc#data/thumbnail/hqDefault的json響應根本不包含tn字段。這就是爲什麼你總是得到空值。

+2

是的,這應該是一個評論。 – BackSlash

+0

我已經看到價值不爲空 –

+0

這是不可能的。嘗試進入每個get方法,並觀察哪個變量變爲null。 @manish Sahu –