这个GET请求有什么问题?

时间:2016-11-24 01:11:17

标签: java android

所以我们正在Android Studio中开发这个应用程序,我们想在网站上发出get请求,当我们运行这段代码时,我们不断收到“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();
}

}

2 个答案:

答案 0 :(得分:0)

没什么,它运作正常!

我相信如果你有一个空指针异常,那么它与你代码的另一部分有关。

但是,这里有一些改进建议

在此片段中,您将文本添加到循环中的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,所以你很可能会看到它

答案 1 :(得分:-1)

你错过了实际连接

con.setRequestMethod("GET");
con.connect();

你的con.getInputStream();由于未建立连接且没有任何内容返回到con。

,因此为null