Java Google查询程序随机开始提供NullPointerException

Java Google查询程序随机开始提供NullPointerException,java,nullpointerexception,gson,Java,Nullpointerexception,Gson,我正在写一个基本程序来获取许多高中的学校网站,但由于某种原因,该程序随机开始给我NullPointerException。我的意思是,我测试了一组代码,我知道这些代码在发生这种情况之前100%有效,但现在不再有效。它也是随机的,有时程序会返回5所学校,有时它会在第一所学校得到一个NullPointerException。我目前所做的如下所示,null指针异常发生在System.out.println()和pw.write()上。我觉得这意味着查询没有返回任何内容,但这只是几分钟前的事 publi

我正在写一个基本程序来获取许多高中的学校网站,但由于某种原因,该程序随机开始给我NullPointerException。我的意思是,我测试了一组代码,我知道这些代码在发生这种情况之前100%有效,但现在不再有效。它也是随机的,有时程序会返回5所学校,有时它会在第一所学校得到一个NullPointerException。我目前所做的如下所示,null指针异常发生在System.out.println()和pw.write()上。我觉得这意味着查询没有返回任何内容,但这只是几分钟前的事

public static void main(String[] args) throws IOException {

    File infile = new File("inputschools.txt");
    Scanner in = new Scanner(infile);
    PrintWriter pw = new PrintWriter("outputschools.txt");

    while(in.hasNextLine()){
        String address = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&start=1&q=";
        String query = in.nextLine() + " high school ohio";
        String charset = "UTF-8";

        URL url = new URL(address + URLEncoder.encode(query, charset));
        Reader reader = new InputStreamReader(url.openStream(), charset);
        GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);

        System.out.println("URL: " + results.getResponseData().getResults().get(0).getUrl() + "\n");
        pw.write(results.getResponseData().getResults().get(0).getUrl() + ",");

    }
}
}

编辑:这是所要求的堆栈跟踪,但我认为它不会很有用

Exception in thread "main" java.lang.NullPointerException
    at GoogleSearch.main(GoogleSearch.java:32)
第32行是println()段

编辑2:

这是实际GoogleResults对象的代码。我一步一步地完成了这个程序,由于某种原因,Google的结果在第二次迭代中是空的。有人能看到/想到为什么会发生这种情况吗

class GoogleResults{

private ResponseData responseData;
public ResponseData getResponseData() { return responseData; }
public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
public String toString() { return "ResponseData[" + responseData + "]"; }

static class ResponseData {
    private List<Result> results;
    public List<Result> getResults() { return results; }
    public void setResults(List<Result> results) { this.results = results; }
    public String toString() { return "Results[" + results + "]"; }
}

static class Result {
    private String url;
    private String title;
    public String getUrl() { return url; }
    public String getTitle() { return title; }
    public void setUrl(String url) { this.url = url; }
    public void setTitle(String title) { this.title = title; }
    public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
}
class谷歌搜索结果{
私人回应数据回应数据;
public ResponseData getResponseData(){return ResponseData;}
public void setResponseData(ResponseData ResponseData){this.ResponseData=ResponseData;}
公共字符串toString(){return“ResponseData[“+ResponseData+”]”;}
静态类响应数据{
私人名单结果;
public List getResults(){return results;}
public void setResults(列出结果){this.results=results;}
公共字符串toString(){return“Results[“+Results+”]”;}
}
静态类结果{
私有字符串url;
私有字符串标题;
公共字符串getUrl(){return url;}
公共字符串getTitle(){return title;}
public void setUrl(字符串url){this.url=url;}
public void setTitle(字符串标题){this.title=title;}
公共字符串toString(){return“Result[url:+url+,title:+title+”];}
}

}

请为异常添加堆栈跟踪。这将帮助人们更容易地确定问题。这一行
System.out.println(“URL:+results.getResponseData().getResults().get(0.getUrl()+”\n”)
有很多链式方法调用,其中一个是返回
null
。将它们分成单独的行并检查返回值。如果出现异常,请检查相应的json?我想我已经找出了问题所在。我认为像这样查询谷歌是违反ToS的,他们禁止我使用api。