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