最初のアクティビティには、他のすべてのアクティビティで使用される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();
}
しかし、私は同じエラーが発生しました