android http post asynctask

请任何人都可以告诉我如何使一个http post在AsyncTask后台工作,以及如何将parameter passing给AsyncTask? 我发现的所有例子对我来说都不够清楚,而且都是关于下载文件的。

我在我的主要活动中运行这个代码,我的问题是当代码发送信息到服务器的应用程序放慢,如果它被冻结2至3秒,然后继续正常工作,直到下一次发送。 这个http post发送四个variables到服务器(book,libadd和time),第四个是固定的(名字)

提前致谢

public void SticketFunction(double book, double libadd, long time){ Log.v("log_tag", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SticketFunction()"); //HttpClient HttpClient nnSticket = new DefaultHttpClient(); //Response handler ResponseHandler<String> res = new BasicResponseHandler(); HttpPost postMethod = new HttpPost("http://www.books-something.com"); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5); nameValuePairs.add(new BasicNameValuePair("book", book+"")); nameValuePairs.add(new BasicNameValuePair("libAss", libass+"")); nameValuePairs.add(new BasicNameValuePair("Time", time+"")); nameValuePairs.add(new BasicNameValuePair("name", "jack")); //Encode and set entity postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8)); //Execute //manSticket.execute(postMethod); String response =Sticket.execute(postMethod, res).replaceAll("<(.|\n)*?>",""); if (response.equals("Done")){ //Log.v("log_tag", "!!!!!!!!!!!!!!!!!! SticketFunction got a DONE!"); } else Log.v("log_tag", "!!!!!!!?????????? SticketFunction Bad or no response: " + response); } catch (ClientProtocolException e) { // TODO Auto-generated catch block //Log.v("log_tag", "???????????????????? SticketFunction Client Exception"); } catch (IOException e) { // TODO Auto-generated catch block //Log.v("log_tag", "???????????????????? IO Exception"); } } } 

Solutions Collecting From Web of "android http post asynctask"

起初,你把一个类如下:

 public class AsyncHttpPost extends AsyncTask<String, String, String> { interface Listener { void onResult(String result); } private Listener mListener; private HashMap<String, String> mData = null;// post data /** * constructor */ public AsyncHttpPost(HashMap<String, String> data) { mData = data; } public void setListener(Listener listener) { mListener = listener; } /** * background */ @Override protected String doInBackground(String... params) { byte[] result = null; String str = ""; HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL try { // set up post data ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); Iterator<String> it = mData.keySet().iterator(); while (it.hasNext()) { String key = it.next(); nameValuePair.add(new BasicNameValuePair(key, mData.get(key))); } post.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8")); HttpResponse response = client.execute(post); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){ result = EntityUtils.toByteArray(response.getEntity()); str = new String(result, "UTF-8"); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (Exception e) { } return str; } /** * on getting result */ @Override protected void onPostExecute(String result) { // something... if (mListener != null) { mListener.onResult(result) } } } 

现在。 你只需写下如下几行:

 HashMap<String, String> data = new HashMap<String, String>(); data.put("key1", "value1"); data.put("key2", "value2"); AsyncHttpPost asyncHttpPost = new AsyncHttpPost(data); asyncHttpPost.setListener(new AsyncHttpPost.Listener(){ @Override public void onResult(String result) { // do something, using return value from network } }); asyncHttpPost.execute("http://example.com"); 

首先,我不build议在AsyncTask中做一个Http请求,你最好尝试一个服务。 回到关于如何在声明它时将parameter passing给AsyncTask的问题,您可以像这样定义AsyncTask的每个Object类。

 public AsyncTask <Params,Progress,Result> { } 

所以在你的任务中你应该这样下去

 public MyTask extends<String,Void,Void>{ public Void doInBackground(String... params){//those Params are String because it's declared like that } } 

要使用它,这很简单

 new MyTask().execute("param1","param2","param3")