0

3 行のテキストを返す web サーバー上の php スクリプトに get 要求を送信します。サーバーからの応答を次のように処理します。

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 スクリプトが別の行のテキストを返し、別の解析を使用して)、完全に正常に動作します。返された行をログに記録して、サーバーから適切に返されたかどうかを確認すると、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);
}
4

3 に答える 3

4

ほとんどの場合indexOf、-1 を返し、line.substring(0, -1);スローしますStringIndexOutOfBoundsException

編集
目に見えない文字/行を次々と読んでいる可能性があります1_485963か?

入力が次のようになっているとします。

1_485963\n\n

その後、ログにのみ表示されます1_485963が、2 回目のループが実行されるとクラッシュします。

于 2012-05-02T13:54:28.723 に答える
0

Maybe I'm getting old and blind but how does this

    print("{$row['id']}\n{$row['number']}\n");

produce

1_485963

Surely

print("{$row['id']}_{$row['number']}\n");

is what you need. Apologies if that is not valid PHP as the syntax of that has always refused to stick in my brain.

于 2012-05-02T14:43:40.413 に答える
0

最初にデバッグを試みます。または、これを試してください

指定された文字列で line.indexOf('_') を使用できないことは確かです

1) 最初に文字列のログを出力し、「_」文字を確認します。

StringIndexOutOfBoundsException を回避するためにこれを試してください

while ((line = rd.readLine()) != null) {
if (line.indexOf('_') != -1) {
   String a = line.substring(0, line.indexOf('_'));
   String b = line.substring(line.indexOf('_') + 1);
    }else{
   // means that index is not found
   }
 }

そして最後に、string len = 11 と伝え、位置 5 で char を印刷するとエラーがスローされます。

文字列の len の出力と位置 5 の char の出力の間に何をしているかを確認してください。

最後に、バッファ入力ストリームからジャンク文字を取得する場合があります。n / wからの通過のため。それもチェック。

于 2012-05-02T14:12:23.683 に答える