从json读取值到java对象时的java.lang.NullPointerException

时间:2014-01-15 09:47:12

标签: java json

这里我正在读取从youtube到java的json值。 我获取正确的值除缩略图数据,同时获取缩略图对象值我得到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());

如果你看到这个link。它具有sqDefaulthqDefault

的价值

我想获取sqDefaulthqDefault的值。 怎么做。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用调试器找出哪个对象为null是解决问题的最快方法。

OR

使用以下代码查找null返回值:

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

- 新增了以下文字-----------------

好吧,我已经在我的笔记本电脑上运行了你的程序,似乎https://gdata.youtube.com/feeds/api/videos/aa_wFClyiVE?v=2&alt=jsonc#data/thumbnail/hqDefault的json响应根本不包含tn字段。这就是为什么你总是得到零值。