1

最初のアクティビティには、他のすべてのアクティビティで使用されるhttpclientが1つだけあります。PHPセッションを使用しているためです。

私の最初のアクティビティでは、アイテムをロードするのに4〜5秒かかるリストビューがあり(サーバーへの接続によって実行されます)、同じアクティビティで検索フィールドがあります...ボタンをクリックすると、同じhttpclient検索結果を使用すると別のリストビューにロードされるsearchActivity。私の問題は、何かを検索しようとすると、最初のアクティビティの4〜5秒の読み込み時間中に、アプリがクラッシュして次のように表示されることです。

SingleClientConnManagerの無効な使用:接続はまだ割り当てられています。

別の接続を割り当てる前に、必ず接続を解放してください。

java.lang.IllegalStateException:ラップされた接続はありません。

そして最終的には後でnullポインタ例外

最初のアクティビティを完了する前にsearchActivityで同じhttpclientを使用しているため、このエラーが発生していると思います(間違っている場合は修正してください)

それで、私の仮定が正しければ、最初のアクティビティからsearchAvtivityに移動する意図で、この接続をどのように解放できますか?

ありがとうございました

コード:

    try {
        HttpPost httppost = new HttpPost(
                SignUpActivity.url+"/feed/fetchfeed");
        httppost.setHeader("X_REQUESTED_WITH", "xmlhttprequest");
        httppost.setHeader("MOBILE_DATA_REQUESTED", "mobileHttpRequest");
        HttpResponse response = SignUpActivity.httpclient.execute(httppost);

        Log.d("response", "" + response);
        HttpEntity entity = response.getEntity();

        Log.d("entity", "" + entity);
        is = entity.getContent();

        Log.d("is", "" + is);

        try {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(is, "iso-8859-1"), 8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");

            Log.d("sb", "" + sb);
            String line = "0";
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
            Log.d("result", result);
        } catch (Exception e) {
            Log.e("error3", "Error in http connection" + e.toString());
        }

        Log.e("response", "response is:" + response.toString());
    } catch (Exception e) {
        Log.e("error4", "Error in http connection" + e.toString());
    }

    try {
        Log.d("JArray", "entered try");
        JArray = new JSONArray(result);
        feed_products_list = new ArrayList<Product>();
        Log.d("JArray", "try last line");
    } catch (JSONException e) {
        Log.d("JArray", "in catch");
        e.printStackTrace();
    }

    JSONObject jsonObj;
    JSONObject jsonObjStore;
    JSONObject jsonObjUser;

    for (int i = 0; i < JArray.length(); i++) {
        try {
            Log.d("jsonObj",
                    "entered try" + " " + i + " " + JArray.length());
            jsonObj = JArray.getJSONObject(i);
            jsonObjUser = jsonObj.getJSONObject("user");
        } catch (Exception e) {
            Log.d("jsonObj", "in catch");
            continue;
        }

        try {
            Log.d("feed_products_list", "entered try");
            Log.d("type of action", jsonObj.getString("action"));
            if (jsonObj.getString("action").equals("entry")) {
                Log.d("if block", "entered block 'entry'");

                jsonObjStore = jsonObj.getJSONObject("store");
                Log.d("store", jsonObjStore.getString("name"));

                feed_products_list.add(new Product(jsonObj.getInt("id"),
                        jsonObj.getString("action"), jsonObj
                                .getString("image"), jsonObj
                                .getString("product_name"), jsonObj
                                .getString("reported_price_formated"),
                        jsonObjStore.getString("name"), jsonObjStore
                                .getString("area"), jsonObjStore
                                .getString("city"), jsonObj
                                .getString("mrp"), jsonObjUser
                                .getString("name"), jsonObj
                                .getLong("reported_timestamp"), jsonObj
                                .getInt("discount"), jsonObjStore
                                .getDouble("lat"), jsonObjStore
                                .getDouble("lng")));

                Log.d("store id", jsonObjStore.getString("id"));
                Log.d("feed_products_list product: ",
                        feed_products_list.get(i).lat + "   "
                                + feed_products_list.get(i).lng);

            } else if (jsonObj.getString("action").equals("contest")) {
                Log.d("if block", "entered block 'contest'");
                feed_products_list.add(new Product(jsonObj.getInt("id"),
                        jsonObj.getString("action"), jsonObjUser
                                .getString("image"), jsonObj
                                .getString("product_name"), jsonObj
                                .getString("city"), jsonObjUser
                                .getString("name"), jsonObj
                                .getLong("reported_timestamp")));

                Log.d("feed_products_list",
                        feed_products_list.get(i).productName);

            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    m = 1;
}

私はこれを追加しました:

                try {
                    is.close();
            Intent intent = new Intent(FeedListViewActivity.this,
                            SearchActivity.class);
                    startActivity(intent);
                    Log.d("onClick", search_string);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

しかし、私は同じエラーが発生しました

4

1 に答える 1

1

InputStreamhttpclientから取得したを閉じると、接続は自動的に閉じられます。コードをチェックして、正しく閉じていることを確認してください。

于 2012-05-29T08:40:53.433 に答える