将值从json读取到java对象时发生java.lang.NullPointerException

将值从json读取到java对象时发生java.lang.NullPointerException,java,json,Java,Json,这里我正在从youtube到java阅读json值。 在获取缩略图对象值时,我正确地获取了除缩略图数据以外的值。我获取的是java.lang.NullPointerException public class JsonVideoDetais { public static void main(String... args) { BufferedReader reader = null; StringBuilder buffer = null;

这里我正在从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());
如果你能看到这个。它具有
sqDefault
hqDefault

我想获取
sqDefault
hqDefault
的值。
如何做到这一点。

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

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

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
根本不包含
tn
字段。这就是为什么总是得到空值。

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

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

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
根本不包含
tn
字段。这就是为什么总是得到空值。

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

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

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
根本不包含
tn
字段。这就是为什么总是得到空值。

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

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

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
根本不包含
tn
字段。这就是为什么您总是得到空值。

在您的数据类中,我创建了这样一个对象。我猜缩略图对象正在设置为缩略图,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

在您的数据类中,我创建了这样一个对象。我猜缩略图对象正在设置为缩略图,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

在您的数据类中,我创建了这样一个对象。我猜缩略图对象正在设置为缩略图,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

在您的数据类中,我创建了这样一个对象。我猜缩略图对象正在设置为缩略图,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


哪一行是52?
System.out.println(data.getData().getTn().getHqDefault())某些内容是空的。将链式调用拆分为带有临时变量的单独行,然后查看哪个是
null
。它看起来确实像是
getTn()
正在返回
null
。是
getTn()
为null。为什么不加载valueIs您的连接使用代理?检查在尝试连接时是否引发了任何异常,忽略它不是一个好主意。哪一行是52?
System.out.println(data.getData().getn().getHqDefault())某些内容是空的。将链式调用拆分为带有临时变量的单独行,然后查看哪个是
null
。它看起来确实像是
getTn()
正在返回
null
。是
getTn()
为null。为什么不加载valueIs您的连接使用代理?检查在尝试连接时是否引发了任何异常,忽略它不是一个好主意。哪一行是52?
System.out.println(data.getData().getn().getHqDefault())某些内容是空的。将链式调用拆分为带有临时变量的单独行,然后查看哪个是
null
。它看起来确实像是
getTn()
正在返回
null
。是
getTn()
为null。为什么不加载valueIs您的连接使用代理?检查在尝试连接时是否引发了任何异常,忽略它不是一个好主意。哪一行是52?
System.out.println(data.getData().getn().getHqDefault())某些内容是空的。将链式调用拆分为带有临时变量的单独行,然后查看哪个是
null
。它看起来确实像是
getTn()
正在返回
null
。是
getTn()
为null。为什么不加载valueIs您的连接使用代理?检查在您尝试连接时是否引发了任何异常,忽略它不是一个好主意。是的,这应该是一个注释。我看到值不为null,这是不可能的。在每个get方法中尝试一步,并观察哪个变量最终为null@manish SahuI已经修改了我的答案。过来看。也许会有帮助@manish Sahu
getTn()
为null,但如果您看到它的值不是null,我想获取这些值,这应该是一个注释。我已经看到值不是null,这是不可能的。在每个get方法中尝试一步,并观察哪个变量最终为null@manish SahuI已经修改了我的答案。过来看。也许会有帮助@文科硕士