网络——使用HttpClient

来源:互联网 发布:张学友最好的live 知乎 编辑:程序博客网 时间:2024/05/29 18:18


HttpClient 是Apache 提供的HTTP 网络访问接口(无法创建实例),可以完成和HttpURLConnection 几乎一模一样的效果,但是用法与HttpURLConnection差别很大

通常会创建一个DefaultHttpClient 的实例:

HttpClient httpClient = new DefaultHttpClient();


若要发起一条GET 请求,可以创建一个HttpGet 对象,并传入目标的网络地址
HttpGet httpGet = new HttpGet("https://www.baidu.com");

然后调用HttpClient 的execute()方法

httpClient.execute(httpGet);    //返回一个HttpResponse 对象,服务器所返回的所有信息就会包含在这里面


若要发起一条POST 请求,需要创建一个HttpPost 对象,并传入目标的网络地址

HttpPost httpPost = new HttpPost("https://www.baidu.com");

再通过一个NameValuePair 集合来存放待提交的参数
List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("username", "admin"));params.add(new BasicNameValuePair("password", "123456"));
将这个参数集合传入到一个UrlEncodedFormEntity 中,
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "utf-8");
然后调用HttpPost 的setEntity()方法将构建好的UrlEncodedFormEntity传入
httpPost.setEntity(entity);
调用HttpClient 的execute()方法
httpClient.execute(httpGet);    //返回一个HttpResponse 对象,服务器所返回的所有信息就会包含在这里面

通常情况下都会先取出服务器返回的状态码,如果等于200 就说明请求和响应都成功了

if (httpResponse.getStatusLine().getStatusCode() == 200) {       Toast.makeText(this, "请求和响应都成功了", Toast.LENGTH_SHORT).show();}

例子:同HttpURLConnection,修改MainActivity代码

public class MainActivity extends AppCompatActivity {    Button btnSend;    TextView textView;    private int SHOW_RESPONSE = 0;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btnSend = (Button) findViewById(R.id.btn_send);        textView = (TextView) findViewById(R.id.tv);        btnSend.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                sendRequestWithHttpClient();                btnSend.setVisibility(View.GONE);            }        });    }    private void sendRequestWithHttpClient() {        new Thread(new Runnable() { //开启子线程发起网络请求            @Override            public void run() {                try {                    HttpClient httpClient = new DefaultHttpClient();                    HttpGet httpGet = new HttpGet("http://www.baidu.com");                    HttpResponse httpResponse = httpClient.execute(httpGet);                    if (httpResponse.getStatusLine().getStatusCode() == 200) {                        // 请求和响应都成功了                        HttpEntity entity = httpResponse.getEntity();                        String response = EntityUtils.toString(entity, "utf-8");                        Message message = new Message();                        message.what = SHOW_RESPONSE;                        // 将服务器返回的结果存放到Message中                        message.obj = response.toString();                        handler.sendMessage(message);                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        }).start();    }}

运行结果与HttpURLConnection的一样


android6.0SDK中删除HttpClient的相关类



0 0