繁体   English   中英

此GET请求有什么问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM