android 网络基础和几种方式

来源:互联网 发布:斗鱼直播网络要求 编辑:程序博客网 时间:2024/06/18 03:50

网络基础

下面来讲解android中的网络基础

  1. HttpURLConnection
    GET 方式请求:
    **连接网络是耗时的操作注意要写在线程中,更新主线程也一样写在线程中
new Thread() {            @Override            public void run() {                try { String path = "http://www.baidu.com";    URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url                            .openConnection();                    conn.setRequestMethod("GET");                    conn.setConnectTimeout(5000);//设置超时                    int code = conn.getResponseCode();//返回码                    if (code == 200) {                        InputStream inputStream = conn.getInputStream();// 要把inputstream 转换成bitmapBitmap decodeStream = BitmapFactory.decodeStream(inputStream);//把inputStream 转换成StringString stream = StreamTools.readStream(content);                        Message message = Message.obtain();                        message.obj = decodeStream;                        handler.sendMessage(message);                    }                } catch (Exception e) {                    e.printStackTrace();                }            };        }.start();

其中StreamTools是我自己写的一个工具类

POST 请求方式:

new Thread() {            @Override            public void run() {                try {                    // String path = "http://192.168.191.1:9019/news.xml";                    URL url = new URL(path);                    HttpURLConnection conn = (HttpURLConnection) url                            .openConnection();                    conn.setRequestMethod("POST");                    conn.setConnectTimeout(5000);String nString="name=123&&pwd=123";                    conn.setRequestProperty("Content-Type", "application/x-www-from-urlencoded");//设置头信息                    conn.setRequestProperty("Content-Length", nString.length()+"");//设置头信息// 以流的形式把数据写给服务器                    conn.setDoOutput(true);//设置一个标记允许输出                    conn.getOutputStream().write(nString.getBytes());int code = conn.getResponseCode();if (code == 200) {//请求服务器正常                        InputStream inputStream = conn.getInputStream();                        // 要把inputstream 转换成bitmap                        decodeStream = BitmapFactory.decodeStream(inputStream);    // Message message = Message.obtain();    // message.obj = decodeStream;    // message.what=success;//设置消息的类型    if (decodeStream != null) {                            handler.sendEmptyMessage(0);//在handler中更新UI    } else {                            Message message = Message.obtain();                            message.obj = errorResource;                            message.what = error;                            handler.sendMessage(message);                        }                    }                } catch (Exception e) {                    e.printStackTrace();                    Message message = Message.obtain();                    message.obj = errorResource;                    message.what = error;                    handler.sendMessage(message);                }            };        }.start();

2.Httpclient
GET 请求方式

new Thread() {            public void run() {                try {                    String path = "http://www.baidu.com";                    // 1 初始化httpclient                    HttpClient client = new DefaultHttpClient();                    // 2 一个GET请求方式                    HttpGet get = new HttpGet(path);                    //                    // 3 执行这个请求                    HttpResponse response = client.execute(get);                    // 4 返回码                    int code = response.getStatusLine().getStatusCode();                    if (code == 200) {                        // 得到数据                        HttpEntity entity = response.getEntity();                        InputStream content = entity.getContent();                        // 将流转化成String                        final String stream = StreamTools.readStream(content);                        runOnUiThread(new Runnable() {                            @Override                            public void run() {                                tv_name.setText(stream);                            }                        });                    }                } catch (ClientProtocolException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            };        }.start();

POST 请求方式:

new Thread() {            public void run() {                try {                    String path = "http://www.baidu.com";                    // 1 初始化httpclient                    HttpClient client = new DefaultHttpClient();                    // 2 一个post请求方式                    HttpPost post = new HttpPost(path);                    // 3 封装实体                    List<NameValuePair> parameters = new ArrayList<NameValuePair>();NameValuePair valuePair = new BasicNameValuePair("name",                    "123");                    parameters.add(valuePair);                    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(                            parameters);                    post.setEntity(entity);                    // 4 执行这个请求                    HttpResponse response = client.execute(post);                    // 5 返回码                    int code = response.getStatusLine().getStatusCode();                    if (code == 200) {                        // 得到数据                        HttpEntity entitys = response.getEntity();                        InputStream content = entity.getContent();                        // 将流转化成String                        final String stream = StreamTools.readStream(content);                        runOnUiThread(new Runnable() {                            @Override                            public void run() {                                tv_name.setText(stream);                            }                        });                    }                } catch (ClientProtocolException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            };        }.start();

下面给大家介绍一个开源的项目

下载包
直接把android-async-http-master\library\src\main\java 下的com包导入项目中,注意是com包com.loopj.android.http
这个开源项目已经把HttpClient 和子线程已经封装好了,只需要调用就可以
GET:

String path = "http://www.baidu.com";        //创建async        AsyncHttpClient client  = new AsyncHttpClient();        //get请求        client.get(path, new AsyncHttpResponseHandler() {            //请求成功的回调            @Override            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {                Toast.makeText(getApplicationContext(), new String(responseBody), Toast.LENGTH_LONG).show();            }            //请求失败的回调            @Override            public void onFailure(int statusCode, Header[] headers,                    byte[] responseBody, Throwable error) {            }        });

POST:

String path = "http://www.baidu.com";            AsyncHttpClient client  = new AsyncHttpClient();            RequestParams params = new RequestParams();            params.add("name", "123");            client.post(path, params, new AsyncHttpResponseHandler() {                @Override                public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {                    Toast.makeText(getApplicationContext(), new String(responseBody), Toast.LENGTH_LONG).show();                }                @Override                public void onFailure(int statusCode, Header[] headers,                        byte[] responseBody, Throwable error) {                    // TODO Auto-generated method stub                }            });

ok,这三种是关于android网络的方式
看到这么是不是很头疼,不要着急接下来我告诉你什么时候用哪种方式:
/**
* 进行简单的登录时可用这个开源的AsyncHttpClient 或 HttpClient
* 若公司对网络请求有要求的时候就不能用这个开源项目,若要进行:加密,封装头信息等:那就要用HttpUrlConntion
* QQ、即时通信(Xmpp协议)
*
*/
好了,这是android网络的基础,若想要更深的了解,请继续关注

更多

1 0