android 网络基础和几种方式
来源:互联网 发布:斗鱼直播网络要求 编辑:程序博客网 时间:2024/06/18 03:50
网络基础
下面来讲解android中的网络基础
- 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
- android 网络基础和几种方式
- Android中IPC的基础和几种常用方式
- Android中的几种网络请求方式
- Android网络通信的几种方式
- android 几种网络请求方式
- Android几种网络请求方式详解
- Android中的几种网络编程方式
- android 网络编程之网络通信几种方式
- Android中的几种网络请求方式详解
- Android中的几种网络请求方式详解
- Android中的几种网络请求方式详解 .
- Android中的几种网络请求方式详解
- Android中的几种网络请求方式详解
- Android中的几种网络请求方式详解
- Android中的几种网络请求方式详解
- Android中的几种网络请求方式详解 .
- Android中的几种网络请求方式详解
- Android中的几种网络请求方式详解
- Android 隐藏软键盘的同时出现光标
- iOS应用性能优化的25个建议
- Java GC系列(4):垃圾回收监视和分析
- 磁条卡磁道笔记(2)
- lm91000——stm32 -气体传感器(氧气 硫化氢,氨气)
- android 网络基础和几种方式
- mac终端下使用sqlite
- gitolite搭建git仓库(服务端+客户端)
- 【Oracle 基础】基本数据类型
- servlet 代码
- 开发工具(myeclipse,Eclipse,vc++6.0,Python)
- URL和URI的区别
- 23种设计模式(3):模版方法模式
- Android图片查看支持双击放大缩小、多点触摸(多机型测试,长期使用很稳定)