2014-01-15 32 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 –