我向Web服務器上的php腳本發送獲取請求,該請求返回3行文本。我處理服務器這樣的迴應:Android:令人難以置信的StringIndexOutOfBoundsException
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
比我分析是這樣的線路:
line = "";
while ((line = rd.readLine()) != null) {
String a = line.substring(0, line.indexOf('_'));
String b = line.substring(line.indexOf('_') + 1);
}
而這種不斷拋出一個異常StringIndexOutOfBounds,我真的不能明白爲什麼。我已經在我的項目中的其他地方使用類似的方法(使用不同的PHP腳本returnig不同的文本行和不同的解析),它工作得很好。當我記錄返回的行以查看它們是否從服務器正確返回時,它們與PHP腳本發送的行相同。
這裏有趣的部分。當我非常絕望地生長時,我嘗試使用以下方法測量線條:
int l = line.length();
並且這返回了11與我的線。不是,我只是嘗試使用顯示的東西:
line.charAt(5);
它扔了的StringIndexOutOfBoundsException:5。我真的不知道什麼是錯。有人有想法嗎?謝謝!
編輯
這是PHP腳本
$query = mysql_query("SELECT * FROM users");
while($row = mysql_fetch_array($query)) {
print("{$row['id']}\n{$row['number']}\n");
}
這是我的Java代碼:
while ((line = rd.readLine()) != null) {
Log.v("connection - user list", line); //This line logs: 1_485963
//But this doesent work
String a = line.substring(0, line.indexOf('_'));
String b = line.substring(line.indexOf('_') + 1);
}
indexOf返回-1,如果它沒有找到的東西。 -1沒有有效的索引。 – zapl
對於你的第一個循環,你是否只傳遞了包含至少一個不是最終字符的'_'的字符串?無法解釋第二位: -/ – Rup
在嘗試提取子字符串之前,您應該將indexOf的結果與1以及1行的長度進行比較。 –