[英]What is wrong with this GET request?
因此,我们正在Android Studio中开发此应用,我们希望在该应用中向网站提出获取请求,并且在运行这段代码时,我们一直收到“ null”错误,我相信是这样,因为这段代码中的变量为null。 有人可以看一下它,看看在什么地方可以检测到某些变量未正确使用,因此提供了空错误?
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();
}
}
没事,一切正常!
我相信,如果您有一个空指针异常,则它与代码的另一部分有关。
但是,这里有一些改进建议
在此代码段中,将文本循环添加到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,因此您可能会看到它
您错过了实际连接
con.setRequestMethod("GET");
con.connect();
您的con.getInputStream(); 为null,因为未建立连接且没有任何内容返回给con。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.