簡體   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