1

このコードを実行すると、以下のエラー メッセージが表示されます。

添付のスタック トレースでリソースが取得されましたが、解放されませんでした。リソース リークを回避する方法については、java.io.Closeable を参照してください。

以下のコードでリソース リークを特定できません。実際に私が間違っていることを誰かが指摘してくれたら、私はとてもうれしいです。

HttpPost request = new HttpPost(url);
        StringBuilder sb = new StringBuilder();
        StringEntity entity = new StringEntity(jsonString);
        entity.setContentType("application/json;charset=UTF-8");
        entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json;charset=UTF-8"));
        request.setHeader("Accept", "application/json");
        request.setEntity(entity);

        HttpResponse response = null;
        DefaultHttpClient httpclient = getHttpClientImpl();

        BufferedReader reader = null;
        InputStream in = null;
        try {
            response = httpclient.execute(request);
            in = response.getEntity().getContent();
            reader = new BufferedReader(new InputStreamReader(in));
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception se) {
            Log.e("Exception", se + "");
            throw se;
        } finally {
            if (in != null)
                in.close();

            if (reader != null)
                reader.close();

            if (client != null && client.getConnectionManager() != null) {
        client.getConnectionManager().shutdown();
    }
        }
        return sb.toString();
4

1 に答える 1

1

そのコードに問題はありませんが、プール内のアイドル状態の接続をすべて閉じることをお勧めします。

public abstract void closeIdleConnections (long idletime, TimeUnit tunit)

さらに、完全に正しく構成されていない場合、DefaultHttpClient には既知の問題がいくつかあります。HttpClient インターフェースの実装として AndroidHttpClient を使用することをお勧めします。説明については、次のドキュメントを参照してください。

http://developer.android.com/reference/android/net/http/AndroidHttpClient.html

于 2012-12-10T11:00:37.790 に答える