Android中使用HttpClient框架进行get/post提交

来源:互联网 发布:ubuntu apt jdk1.8 编辑:程序博客网 时间:2024/05/22 01:46

使用HttpClient框架不需要去操作任何的字符串,而且用框架提交数据post请求头里的数据都是由框架自动生成,程序员只管提交数据,框架会根据你提交的数据大小/类型等不同自动生成post请求头里应该有的属性,而不需要自己操作字符串来生成,这样在开发中效率会更高,也更便于理解.

使用HttpClient框架进行GET提交

基本框架:

        //使用httpClient框架做get方式提交        //1,创建HttpClient对象        HttpClient hc = new DefaultHttpClient();        //2,创建httpGet对象        HttpGet hg = new HttpGet();        try {            //3,使用客户端对象把get请求发出去            hc.execute(hg);        } catch (Exception e) {            e.printStackTrace();        } 
    public void get(View v){        EditText et_name = (EditText) findViewById(R.id.et_name);        EditText et_pass = (EditText) findViewById(R.id.et_pass);        final String name = et_name.getText().toString();        final String pass = et_pass.getText().toString();        Thread t = new Thread(){            @Override            public void run() {                String path = "http://10.66.121.5/WebGet/servlet/LoginServlet?name=" +URLEncoder.encode(name) + "&pass=" + pass;                //使用httpClient框架做get方式提交                //1,创建HttpClient对象                HttpClient hc = new DefaultHttpClient();                //2,创建httpGet对象,构造方法的参数就是网址                HttpGet hg = new HttpGet(path);                try {                    //3,使用客户端对象把get请求发出去                    HttpResponse hr = hc.execute(hg);                    //拿到响应头中的状态行(就是第一行)                    StatusLine sl = hr.getStatusLine();                    //状态码==响应码                    if(sl.getStatusCode() == 200){                        //拿到响应头的实体,即服务器所返回的内容                        HttpEntity he = hr.getEntity();                        //拿到实体中的内容,即服务器返回的输入流                        InputStream is = he.getContent();                        String text = Utils.getTextFromStream(is);                        //发送消息,让主线程刷新ui                        Message msg = handler.obtainMessage();                        msg.obj = text;                        handler.sendMessage(msg);                    }                } catch (Exception e) {                    e.printStackTrace();                }             }        };        t.start();    }

使用HttpClient框架进行POST提交

    public void post(View v){        EditText et_name = (EditText) findViewById(R.id.et_name);        EditText et_pass = (EditText) findViewById(R.id.et_pass);        final String name = et_name.getText().toString();        final String pass = et_pass.getText().toString();        Thread t = new Thread(){            @Override            public void run() {                String path = "http://10.66.121.5/WebGet/servlet/LoginServlet";                //1,创建客户端对象                HttpClient hc = new DefaultHttpClient();                //2,创建post请求对象                HttpPost hp = new HttpPost(path);                //封装form表单提交的数据                BasicNameValuePair bnvp = new BasicNameValuePair("name", name);                BasicNameValuePair bnvp2 = new BasicNameValuePair("pass", pass);                List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();                //把BasicNameValuePair放入集合中                parameters.add(bnvp);                parameters.add(bnvp2);                try {                    //要提交的数据已经在集合中了,把集合传给实体对象                    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");                    //设置post请求对象的实体,实际上是把要请求的数据封装到post请求的输出流中                    hp.setEntity(entity);                    //3,使用客户端发送post请求                    HttpResponse hr = hc.execute(hp);                    if(hr.getStatusLine().getStatusCode() == 200){                        InputStream is = hr.getEntity().getContent();                        String text = Utils.getTextFromStream(is);                        Message msg = handler.obtainMessage();                        msg.obj = text;                        handler.sendMessage(msg);                    }                } catch (Exception e) {                    e.printStackTrace();                }             }        };        t.start();    }

使用异步HttpClient框架进行GET提交

开源框架:https://github.com/loopj/android-async-http

ExampleUsage.java

public class ExampleUsage {    public static void makeRequest() {        AsyncHttpClient client = new AsyncHttpClient();        client.get("http://www.google.com", new AsyncHttpResponseHandler() {            @Override            public void onSuccess(String response) {                System.out.println(response);            }        });    }}

由此看来使用比较简单

    public void get(View v){        EditText et_name = (EditText) findViewById(R.id.et_name);        EditText et_pass = (EditText) findViewById(R.id.et_pass);        final String name = et_name.getText().toString();        final String pass = et_pass.getText().toString();        String url = "http://10.66.121.5/WebGet/servlet/LoginServlet?name=" +URLEncoder.encode(name) + "&pass=" + pass;        //创建异步httpClient        AsyncHttpClient ahc = new AsyncHttpClient();        //发送get请求提交数据        ahc.get(url, new MyResponseHandler());    }    class MyResponseHandler extends AsyncHttpResponseHandler{        //请求服务器成功时,此方法会调用(注:不管密码对不对,只要响应码是200就调用)        @Override        public void onSuccess(int statusCode, Header[] headers,                byte[] responseBody) {            Toast.makeText(MainActivity.this, new String(responseBody), 0).show();        }        //请求失败此方法调用        @Override        public void onFailure(int statusCode, Header[] headers,                byte[] responseBody, Throwable error) {            //此时responseBody是错误界面的源文件,因此可以简单弹一个"请求失败"            Toast.makeText(MainActivity.this, "请求失败", 0).show();        }    }

使用异步HttpClient框架进行POST提交

    public void post(View v){        EditText et_name = (EditText) findViewById(R.id.et_name);        EditText et_pass = (EditText) findViewById(R.id.et_pass);        final String name = et_name.getText().toString();        final String pass = et_pass.getText().toString();        String url = "http://10.66.121.5/WebGet/servlet/LoginServlet";        //创建异步httpClient        AsyncHttpClient ahc = new AsyncHttpClient();        //把要提交的数据封装至RequestParams对象        RequestParams params = new RequestParams();        params.add("name", name);        params.add("pass", pass);        //发送post请求提交数据        ahc.post(url, params, new MyResponseHandler());    }
0 0
原创粉丝点击