簡體   English   中英

無效使用SingleClientConnManager:仍分配連接

[英]Invalid use of SingleClientConnManager: connection still allocated

我想知道為什么此代碼無法執行? 我正在嘗試通過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. 

無效使用SingleClientConnManager:仍分配連接。

您正在執行兩次http請求,這是完全錯誤的,然后再使用它。 因此刪除第二個httpclient.execute(httppost); 因為您已經執行了此http請求。

並稱之為

httpResponse.getEntity().consumeContent();

調用上述方法來指示不再需要該實體的內容。 由於此方法調用,所有實體實現均應釋放所有分配的資源

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());

如您所願,在代碼中檢索響應

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM