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