0

ListViewをスクロールし、リストの最後の項目に達したときに新しいデータをフェッチすると、この例外が発生します。

これは、新しいデータを取得するためのコードです。

public static String PostData(String url, String sa[][]) {

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    int n = sa.length;
    for (int i = 0; i < n; i++) {
        nameValuePairs.add(new BasicNameValuePair(sa[i][0], sa[i][1]));
    }
    HttpPost httppost;
    try {
        httppost = new HttpPost(url);
    } catch (Exception e) {
    }
    try {
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    } catch (UnsupportedEncodingException e) {
    }
    HttpResponse response = null;
    try {
        response = client.execute(httppost);
    }catch (Exception e) {
    }
    HttpEntity entity = response.getEntity();
    try {
        is = entity.getContent();
    } catch (Exception e) {
    }
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        sb = new StringBuilder();
        sb.append(reader.readLine());
        String line = "0";
        while ((line = reader.readLine()) != null) {
            sb.append("\n" + line);
        }
        result = sb.toString();
    } catch (Exception e) {
        //I get Exception here saying: Attempted read on closed stream
    }finally{
        try {
            reader.close();
        } catch (Exception e) {
        }
    }
}

私が使用したクライアントは次のとおりです。

private static DefaultHttpClient client = getThreadSafeClient();

public static DefaultHttpClient getThreadSafeClient() {

    DefaultHttpClient client = new DefaultHttpClient();
    ClientConnectionManager mgr = client.getConnectionManager();
    HttpParams params = client.getParams();
    client = new DefaultHttpClient(new ThreadSafeClientConnManager(params,
            mgr.getSchemeRegistry()), params);
    return client;
}

リストビューの一番下までスクロールすると、PostDataメソッドは新しい10個のアイテムを取得します。

問題は、これは最初の3〜4回のスクロールで正常に機能し、後で例外が発生し、追加された新しい10個のアイテムが前のデータ(重複)からのものであるということです。

時々私はこの例外を得る:

Socket closed

代わりに

Attempted read on closed stream

しかし、私はそれを修正するために、ソケットを使用していません。

編集:

実際、私はすべてのキャッチブロックにログインしていて、例外を出力します。しかし、私はそれらすべてのログを質問に追加しませんでした。LogCatで取得したものは上にリストされています。

Logcats情報でこれらの行を取得し続けます:

11-21 15:49:57.735: I/System.out(1034): close [socket][/0.0.0.0:36508]
11-21 15:49:57.735: I/System.out(1034): close [socket][/0.0.0.0:36508]
11-21 15:50:02.978: I/System.out(1034): [socket][3] connection /76.74.166.78:80(0)
11-21 15:50:03.010: I/System.out(1034): /76.74.166.78:80(0)
11-21 15:50:03.330: I/System.out(1034): Socket[addr=/0.0.0.0,port=0,localport=33818]
11-21 15:50:03.331: I/System.out(1034): [socket][/192.168.1.6:33818]
11-21 15:50:03.341: I/System.out(1034): setSoSndTimeout:0
11-21 15:50:03.342: I/System.out(1034): setSendBufferSize:8096
11-21 15:50:04.164: I/System.out(1034): close [socket][/0.0.0.0:33818]
11-21 15:50:04.165: I/System.out(1034): close [socket][/0.0.0.0:33818]

助けてください。ありがとうございました。

4

1 に答える 1

1

考えられるすべての例外を無視すると、この種のエラーは避けられません。try/catch自動的に疑われる後の、より多くのコードを持つメソッドの途中のブロック。例外を適切にキャッチ、ロギング、および処理してみてください。これは、例外が発生した後、発生していないかのように続行しないことを意味します。

于 2012-11-21T09:34:52.050 に答える