Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个GET请求有什么问题?_Java_Android - Fatal编程技术网

Java 这个GET请求有什么问题?

Java 这个GET请求有什么问题?,java,android,Java,Android,所以我们正在Android Studio中开发这个应用程序,我们想向一个网站发出get请求,当我们运行这段代码时,我们不断得到一个null错误,我认为是这样的,因为这段代码中的一个变量是null。是否有人可以查看一下,并看到您可能检测到某些变量未正确使用,从而提供空错误的任何地方 public class SpotAlgo { String vidLink; int linkLoc; String testString = "<title>"; String result; pub

所以我们正在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();
}

}

您错过了实际连接

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在运行你的代码时写的一首歌,直接复制粘贴