我的第一个活动中只有一个httpclient用于所有其他活动。因为我使用的是PHP Sessions。
在我的第一个活动中,我有一个列表视图,它需要 4-5 秒来加载项目(这将通过与服务器的连接来完成),并且在同一个活动中,我有一个搜索字段...单击按钮会将我带到使用相同 httpclient 搜索结果的 searchActivity 将加载到不同的列表视图中。我的问题是在第一个活动的 4-5 秒加载时间内,如果我尝试搜索某些内容,我的应用程序崩溃说:
SingleClientConnManager的使用无效:仍然分配了连接。
确保在分配另一个连接之前释放连接。
java.lang.IllegalStateException:没有包装的连接。
最终出现空指针异常
我认为在完成第一个活动之前我在 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();
}
但我得到了同样的错误