Android HttpPost:如何得到结果

我一直试图发送一个HttpPost请求和检索响应,但即使我能够build立连接,我还没有得到如何获取请求响应返回的string消息

HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.myurl.com/app/page.php"); // Add your data List < NameValuePair > nameValuePairs = new ArrayList < NameValuePair > (5); nameValuePairs.add(new BasicNameValuePair("type", "20")); nameValuePairs.add(new BasicNameValuePair("mob", "919895865899")); nameValuePairs.add(new BasicNameValuePair("pack", "0")); nameValuePairs.add(new BasicNameValuePair("exchk", "1")); try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); Log.d("myapp", "works till here. 2"); try { HttpResponse response = httpclient.execute(httppost); Log.d("myapp", "response " + response.getEntity()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } 

对不起,我听起来很天真,因为我是新来的java。 请帮帮我。

尝试在你的回应中使用EntityUtil

 String responseBody = EntityUtils.toString(response.getEntity()); 
  URL url; url = new URL("http://www.url.com/app.php"); URLConnection connection; connection = url.openConnection(); HttpURLConnection httppost = (HttpURLConnection) connection; httppost.setDoInput(true); httppost.setDoOutput(true); httppost.setRequestMethod("POST"); httppost.setRequestProperty("User-Agent", "Tranz-Version-t1.914"); httppost.setRequestProperty("Accept_Language", "en-US"); httppost.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); DataOutputStream dos = new DataOutputStream(httppost.getOutputStream()); dos.write(b); // bytes[] b of post data String reply; InputStream in = httppost.getInputStream(); StringBuffer sb = new StringBuffer(); try { int chr; while ((chr = in.read()) != -1) { sb.append((char) chr); } reply = sb.toString(); } finally { in.close(); } 

这个代码片段的作品。 我沿着searchfind了它,但从J2ME代码。

您可以使用ResponseHandler调用execute方法。 这是一个例子:

 ResponseHandler<String> responseHandler = new BasicResponseHandler(); String response = httpClient.execute(httppost, responseHandler); 

你可以这样做

  public class MyHttpPostProjectActivity extends Activity implements OnClickListener { private EditText usernameEditText; private EditText passwordEditText; private Button sendPostReqButton; private Button clearButton; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); usernameEditText = (EditText) findViewById(R.id.login_username_editText); passwordEditText = (EditText) findViewById(R.id.login_password_editText); sendPostReqButton = (Button) findViewById(R.id.login_sendPostReq_button); sendPostReqButton.setOnClickListener(this); clearButton = (Button) findViewById(R.id.login_clear_button); clearButton.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId() == R.id.login_clear_button){ usernameEditText.setText(""); passwordEditText.setText(""); passwordEditText.setCursorVisible(false); passwordEditText.setFocusable(false); usernameEditText.setCursorVisible(true); passwordEditText.setFocusable(true); }else if(v.getId() == R.id.login_sendPostReq_button){ String givenUsername = usernameEditText.getEditableText().toString(); String givenPassword = passwordEditText.getEditableText().toString(); System.out.println("Given username :" + givenUsername + " Given password :" + givenPassword); sendPostRequest(givenUsername, givenPassword); } } private void sendPostRequest(String givenUsername, String givenPassword) { class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{ @Override protected String doInBackground(String... params) { String paramUsername = params[0]; String paramPassword = params[1]; System.out.println("*** doInBackground ** paramUsername " + paramUsername + " paramPassword :" + paramPassword); HttpClient httpClient = new DefaultHttpClient(); // In a POST request, we don't pass the values in the URL. //Therefore we use only the web page URL as the parameter of the HttpPost argument HttpPost httpPost = new HttpPost("http://www.nirmana.lk/hec/android/postLogin.php"); // Because we are not passing values over the URL, we should have a mechanism to pass the values that can be //uniquely separate by the other end. //To achieve that we use BasicNameValuePair //Things we need to pass with the POST request BasicNameValuePair usernameBasicNameValuePair = new BasicNameValuePair("paramUsername", paramUsername); BasicNameValuePair passwordBasicNameValuePAir = new BasicNameValuePair("paramPassword", paramPassword); // We add the content that we want to pass with the POST request to as name-value pairs //Now we put those sending details to an ArrayList with type safe of NameValuePair List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); nameValuePairList.add(usernameBasicNameValuePair); nameValuePairList.add(passwordBasicNameValuePAir); try { // UrlEncodedFormEntity is an entity composed of a list of url-encoded pairs. //This is typically useful while sending an HTTP POST request. UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList); // setEntity() hands the entity (here it is urlEncodedFormEntity) to the request. httpPost.setEntity(urlEncodedFormEntity); try { // HttpResponse is an interface just like HttpPost. //Therefore we can't initialize them HttpResponse httpResponse = httpClient.execute(httpPost); // According to the JAVA API, InputStream constructor do nothing. //So we can't initialize InputStream although it is not an interface InputStream inputStream = httpResponse.getEntity().getContent(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder stringBuilder = new StringBuilder(); String bufferedStrChunk = null; while((bufferedStrChunk = bufferedReader.readLine()) != null){ stringBuilder.append(bufferedStrChunk); } return stringBuilder.toString(); } catch (ClientProtocolException cpe) { System.out.println("First Exception caz of HttpResponese :" + cpe); cpe.printStackTrace(); } catch (IOException ioe) { System.out.println("Second Exception caz of HttpResponse :" + ioe); ioe.printStackTrace(); } } catch (UnsupportedEncodingException uee) { System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee); uee.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); if(result.equals("working")){ Toast.makeText(getApplicationContext(), "HTTP POST is working...", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(getApplicationContext(), "Invalid POST req...", Toast.LENGTH_LONG).show(); } } } SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); sendPostReqAsyncTask.execute(givenUsername, givenPassword); } 

}

试试这个,看起来是最紧凑的。 尽pipe在现实世界中,您需要使用asynchronous请求,以便在请求的页面被检索时设备不会挂起。

http://www.softwarepassion.com/android-series-get-post-and-multipart-post-requests/

你应该尝试使用HttpGet而不是HttpPost。 我有一个类似的问题,解决了这个问题。