Java 这个GET请求有什么问题?
所以我们正在Android Studio中开发这个应用程序,我们想向一个网站发出get请求,当我们运行这段代码时,我们不断得到一个null错误,我认为是这样的,因为这段代码中的一个变量是null。是否有人可以查看一下,并看到您可能检测到某些变量未正确使用,从而提供空错误的任何地方Java 这个GET请求有什么问题?,java,android,Java,Android,所以我们正在Android Studio中开发这个应用程序,我们想向一个网站发出get请求,当我们运行这段代码时,我们不断得到一个null错误,我认为是这样的,因为这段代码中的一个变量是null。是否有人可以查看一下,并看到您可能检测到某些变量未正确使用,从而提供空错误的任何地方 public class SpotAlgo { String vidLink; int linkLoc; String testString = "<title>"; String result; pub
public class SpotAlgo {
String vidLink;
int linkLoc;
String testString = "<title>";
String result;
public String gettheResult(String v) throws Exception{
String sname = " ";
vidLink = "https://open.spotify.com/track/43PuMrRfbyyuz4QpZ3oAwN";
URL obj = new URL(vidLink);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine = "";
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
result = response.toString();
linkLoc = result.indexOf(testString) + testString.length();
for (int i = linkLoc; i < result.indexOf("on Spotify"); i++) {
sname += result.charAt(i) + "";
}
return obj.toString();
}
}您错过了实际连接
con.setRequestMethod("GET");
con.connect();
你的con.getInputStream;由于未建立连接且未向con返回任何内容,因此为null。无任何内容,工作正常 我相信,如果您有一个空指针异常,它与代码的另一部分有关 然而,这里有一些改进的建议 在这个代码段中,您将向循环中的sname变量添加文本。当您执行这种操作时,StringBuilder将更加高效
for (int i = linkLoc; i < result.indexOf("on Spotify"); i++) {
sname += result.charAt(i) + "";
}
//Could be replaced b
for (int i = linkLoc; i < result.indexOf("on Spotify"); i++) {
sb.append(result.charAt(i));
}
您可以稍后使用sb.toString来获取操作的结果
而且,更重要的是,当你进行网络操作时,你永远不知道结果会是什么。可能有许多变量会影响您将得到的结果,并且通常会抛出异常。请务必将网络代码包装在try{}finally{}中,并关闭在finally块中打开的资源。finally块始终执行
编辑
修正了一个打字错误
编辑2
有些人说它抛出了404异常,我在我的机器上运行时没有得到一个异常,当您执行con.getInputStream时,404会抛出一个IOException,因此您可能会看到,相反,请提供stacktrace。那么,如果返回的文本不包含在Spotify上,例如如果URL返回404错误,会发生什么?如上所述,请提供您的日志,以便我们查看错误。堆栈跟踪为:未能在表面0xa8d63f60上设置EGL_交换行为,错误=EGL_坏_MATCH@enzokie你指的是我提供的网站吗?当我通过邮递员查询时,我得到了一个正确的答案response@EnzokieHEAD请求为我返回200。。。无论如何,Programmer87、Volley/OkHttp可能是更好的满足您需要的HTTP库。您不需要显式调用con.connect,因为在使用getInputStream或getOutputStream时它会被隐式调用。有关更多信息,请参阅此。好的,我们添加了con.connect,但它仍然提供空值。它没有显示它来自何处。我应该添加什么类型的头?@Programmer87您确定它返回响应吗?。尝试将Log.wError Check----放入;就在while循环之前,查看调试是否打印出任何内容这是我的错误,现在返回200。@没人这么说,你是说我组装字符串是导致空错误的原因吗?不,你提供的代码中没有空错误。我只是指出一种更有效的组装方法。@enzokie运行sname时,你从sname的价值中得到了什么?我得到了Exchange,这是Bryson Tiller在运行你的代码时写的一首歌,直接复制粘贴