0

BufferedReader クラスの readLine() について混乱しています。次のコードがあります:</p>

BufferedReader ir=new BufferedReader(new InputStreamReader(httpConnection.getInputStream()));
StringBuffer sb=new StringBuffer();

while(ir.readLine()!=null){
      String tmp=ir.readLine();
      sb.append(tmp);
      if(tmp!=null){
      Log.i("recHtml", tmp);
      }

コードは期待どおりに機能します。ただし、

        if(tmp!=null){

次に、コードは nullpointerexception を取得します。

        Log.i("recHtml", tmp);

私はかなり混乱しています。これは while ステートメントで既に確認していますが、まだ nullpointer エラーが発生するのはなぜですか?

4

4 に答える 4

7
while(ir.readLine()!=null){
    //...
}

これはすでに行を読んでいるので、チェックした行を実際に取得したい場合は、代わりに次の行を取得します。最後のケースでは、他に行が残っていないため、null です。

hasNextLineチェックは、そのチェック用に定義されたメソッドで実際に行う必要があります。

while(ir.hasNextLine()){
    //...
}
于 2013-10-30T13:22:41.643 に答える
0

そうです、while ループで readLine() を 2 回使用して 2 回読んでいることになります。最初に while ループの 1 番目の readLine から読み取り、再び制御が while ループ本体に入ると、2 番目の readLine() で文字列を null として読み取ります。それがヌルポインタ例外を与えている理由です。

while ループで readLine() を 1 回使用してみてください。

于 2013-10-30T14:01:05.297 に答える