2014-01-15 3 views
0

여기 json 값을 java로 읽는 중입니다. 점점 축소 개체 값은 내가 java.lang.NullPointerExceptionjava.lang.NullPointerException json에서 java 객체로 값을 읽는 중

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

을 얻고있는 동안 나는 썸네일 데이터를 제외하고는 제대로 값을 받고 있습니다

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

당신이 WLL의 경우를 호출하는 동안 예외

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

다음 무엇입니까 이 link을 참조하십시오. sqDefault 값을 가지고 있으며 hqDefault

sqDefaulthqDefault 값을 가져오고 싶습니다. 하는 방법.

+1

그리고 어떤 광고가 52인가? – chrylis

+0

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

+0

* 무언가 *가 '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

작동 중입니다. tn의 문제점은 무엇입니까 –

+0

Weibo Li가 이전에 언급했지만 언급 한 것처럼 "tn"이 gdata에 없지만 볼 수 있습니다.이것은 JPA의 테이블 또는 최대 절전 모드 도구의 POJO와 유사하지만, POJO의 varibale 이름에는 같은 열 이름을 사용해야합니다. 유사하게 여기에서 또한. –

1

디버거를 사용하여 어떤 객체가 null인지 알아내는 것이 가장 빠른 방법입니다.

또는

다음 코드로 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 필드가 전혀없는 것 같습니다. 그래서 당신은 항상 null 값을 얻었습니다.

+2

예, 이것은 정말로 코멘트 여야합니다. – BackSlash

+0

값이 null이 아닌 것을 보았습니다. –

+0

그럴 수 없습니다. 모든 get 메소드를 실행하여 어떤 변수가 null인지 확인하십시오. @manish Sahu –