android使用Apache HttpClient实现get/post的请求

来源:互联网 发布:js移除class属性 编辑:程序博客网 时间:2024/05/17 05:55

向网页提交和获取服务响应一般可以使用HttpURLConnection和Apache Httpclient,简单说来,HttpClient是HttpURLConnection的增强版,HttpURLConnection可以做的Httpclient可以实现,其不能实现的Httpclient也可以实现!下面是实现示例代码:

import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LoginServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String nameParameter = request.getParameter("name");         String ageParameter = request.getParameter("age");         String name = new String(nameParameter.getBytes("ISO-8859-1"),"UTF-8");         String age = new String(ageParameter.getBytes("ISO-8859-1"),"UTF-8");         System.out.println("GET");         System.out.println("name="+name);         System.out.println("age="+age);         response.setCharacterEncoding("UTF-8");         OutputStream out = response.getOutputStream();//返回数据         out.write("GET请求成功!".getBytes());         out.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");         String name = request.getParameter("name");         String age  = request.getParameter("age");         System.out.println("POST");         System.out.println("name="+name);         System.out.println("age="+age);         response.setCharacterEncoding("UTF-8");         OutputStream out = response.getOutputStream();         out.write("POST请求成功!".getBytes());         out.close(); }}


下面是android测试代码:

package com.wpf.httpclienttest;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import android.os.Bundle;import android.R.integer;import android.app.Activity;import android.content.Entity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private Button bt1, bt2;private EditText text1,text2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt1 = (Button) findViewById(R.id.button1);bt2 = (Button) findViewById(R.id.button2);text1 = (EditText) findViewById(R.id.editText1);text2 = (EditText) findViewById(R.id.editText2);bt1.setOnClickListener(new listener());bt2.setOnClickListener(new listener());}class listener implements OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1:String uri = "http://192.168.1.188:8080/TestHttp/LoginServlet?name="+text1.getText().toString()+"&age="+text2.getText().toString()+"";String str = sendGet(uri);Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();break;case R.id.button2:String url = "http://192.168.1.188:8080/TestHttp/LoginServlet";List<NameValuePair> list = new ArrayList<NameValuePair>();NameValuePair name1 = new BasicNameValuePair("name", text1.getText().toString());NameValuePair name2 = new BasicNameValuePair("age", text2.getText().toString());list.add(name1);list.add(name2);String st = sendPost(url, list);Toast.makeText(MainActivity.this, st, Toast.LENGTH_LONG).show();break;}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}public String sendGet(String uri) {String value = null;HttpClient client = new DefaultHttpClient();HttpGet get = new HttpGet(uri);HttpResponse response;try {response = client.execute(get);int status = response.getStatusLine().getStatusCode();//if (status == HttpStatus.SC_OK) {//value = EntityUtils.toString(response.getEntity());//}HttpEntity entity = response.getEntity();if(entity != null){BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));String line = null;while((line = reader.readLine()) != null){value = value + line;}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return value;}public String sendPost(String uri,List<NameValuePair> pairs){String value = null;HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost("http://192.168.1.188:8080/TestHttp/LoginServlet");try {post.setEntity(new UrlEncodedFormEntity(pairs));HttpResponse response = client.execute(post);int status = response.getStatusLine().getStatusCode();if(status == HttpStatus.SC_OK){value = EntityUtils.toString(response.getEntity());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return value;}}


在AndroidManifest.xml需添加访问网络权限:

 

原创粉丝点击