SingleClientConnManager的使用无效:仍然分配了连接

时间:2014-02-15 16:41:02

标签: java android android-asynctask

我想知道为什么这段代码不能执行?我正在尝试通过POST方法从我的设备发送数据,但没有错误。该应用程序通过沟通“我的应用程序已停止。”

在我的设备上完成

这是执行:

KlientNameValue kn = new KlientNameValue(getApplicationContext());
kn.new  MyAsyncTask().execute(zam.klient.getNazwa(),zam.klient.getNip(),zam.klient.getAdres());

这是代码:

public class KlientNameValue {

List<NameValuePair> KlientNameValuePairs = new ArrayList<NameValuePair>();
Context context;
public KlientNameValue(Context context) {
    super();
    this.context=context;
}



 public class MyAsyncTask extends AsyncTask<String, Void, Void> {

      @Override protected Void doInBackground(String... params) { 
          // TODO     Auto-generated method stub 
          postData(params[0], params[1], params[2]);
      return null;

      }

      @Override
      protected void onPostExecute(Void result) {

      Toast.makeText(context , "Zlecenie zostało wysłane",
     Toast.LENGTH_LONG).show();
          }

      void postData(String nazwa, String nip, String adres) {
          HttpClient httpclient = new DefaultHttpClient();
          HttpPost httppost = new HttpPost("here is my default link :)");

      try { // Add your data

      KlientNameValuePairs = new ArrayList<NameValuePair>();
      KlientNameValuePairs.add(new BasicNameValuePair("Kli_imie", nazwa));
      KlientNameValuePairs.add(new BasicNameValuePair("Kli_adres", adres));
      KlientNameValuePairs.add(new BasicNameValuePair( "Kli_nr_telefonu",
      nip)); 



      httppost.setEntity(new UrlEncodedFormEntity( KlientNameValuePairs));
      HttpResponse response = httpclient.execute(httppost);
      //httppost.setEntity(new UrlEncodedFormEntity( 
      //      ZamowienieNameValuePairs)); // HttpResponse response1 =



      } catch (IOException e) { // TODO Auto-generated catch block
      e.printStackTrace(); }

      }

      }

}

错误:

02-15 17:45:24.695: E/AndroidRuntime(21890): at android.widget.Toast.<init>(Toast.java:94) 
02-15 17:47:19.343: W/SingleClientConnManager(22288): Invalid use of SingleClientConnManager: connection still allocated.
 02-15 17:47:19.343: W/SingleClientConnManager(22288): Make sure to release the connection before allocating another one. 

2 个答案:

答案 0 :(得分:3)

  

无效使用SingleClientConnManager:仍然分配了连接。

您正在执行两次完全错误的http请求,然后再使用它。因此,请删除第二个httpclient.execute(httppost);,因为您已经执行了此http请求。

并调用此

httpResponse.getEntity().consumeContent();
  

调用上述方法以指示不再需要此实体的内容。由于此方法调用,所有实体实现都应该释放所有已分配的资源

答案 1 :(得分:0)

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;
}

使用此代码,以便您的免费资源和分配或使用的例外不会出现 当两个或多个线程与单个org.apache.http.impl.client.DefaultHttpClient交互时,可能会发生此异常 或者只是为每个请求提供新对象,无论何时何地,您都可以获取或发布http客户端请求与服务器交互以获取数据或下载大文件 像

String post_url="http://www.google.com";
    DefaultHttpClient client = new DefaultHttpClient();
    HttpPost httpost = new HttpPost(Post_url);     
    httpost.setHeader("Accept", "application/json");
    httpost.setHeader("Content-type", "application/json");
    HttpResponse httpResponse = client.execute(httpost);
    String response= EntityUtils.toString(httpResponse.getEntity());

如您所愿在代码中检索响应