文档章节

Android中网络通信的几种方式

abcijkxyz
 abcijkxyz
发布于 2016/07/30 17:23
字数 627
阅读 8
收藏 1
点赞 0
评论 0
Android网络编程分为两种:基于http协议的,和基于socket的。
基于Http协议:HttpClient、HttpURLConnection、AsyncHttpClient框架等
基于Socket:
(1)针对TCP/IP的Socket、ServerSocket
(2)针对UDP/IP的DatagramSocket、DatagramPackage
(3)Apache Mina框架

一、HttpURLConnection的实现方式
String response = null;
Url url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 新建连接实例
connection.setConnectTimeout(20000);// 设置连接超时时间,单位毫秒
//connection.setReadTimeout(20000);// 设置读取数据超时时间,单位毫秒
connection.setDoInput(true);// 是否打开输入流 true|false
connection.setRequestMethod("POST");// 提交方法POST|GET
//connection.setUseCaches(false);// 是否缓存true|false
//connection.setRequestProperty("accept", "*/*");
//connection.setRequestProperty("Connection", "Keep-Alive");
//connection.setRequestProperty("Charset", "UTF-8");
//connection.setRequestProperty("Content-Length", String.valueOf(data.length));
//connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.connect();// 打开连接端口
int responseCode = conn.getResponseCode();
BufferedReader reader = null;
if (responseCode == 200) {
	reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
	StringBuffer buffer = new StringBuffer();
	String line = "";
	while ((line = reader.readLine()) != null) {
		buffer.append(line);
	}
	response = buffer.toString();
} else {
	response = "返回码:"+responseCode;
}
reader.close();
conn.disconnect();
二、HttpClient实现方式
HttpResponse mHttpResponse = null;
HttpEntity mHttpEntity = null;
//创建HttpPost对象
//HttpPost httppost = new HttpPost(path);
//设置httpPost请求参数
//httppost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
HttpGet httpGet = new HttpGet(path);   
HttpClient httpClient = new DefaultHttpClient();
InputStream inputStream = null;
BufferedReader bufReader = null;
String result = "";
// 发送请求并获得响应对象
mHttpResponse = httpClient.execute(httpGet);//如果是“POST”方式就传httppost	
if (mHttpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
	// 获得响应的消息实体
	mHttpEntity = mHttpResponse.getEntity();
	// 获取一个输入流
	inputStream = mHttpEntity.getContent();
	bufReader = new BufferedReader(new InputStreamReader(inputStream));	
	String line = "";
	while (null != (line = bufReader.readLine())) {
		result += line;
	}
	//result = EntityUtils.toString(mHttpResponse.getEntity());
} 
if (inputStream != null) {
	inputStream.close();
}
bufReader.close();
if (httpClient != null) {
	httpClient.getConnectionManager().shutdown();
}
三、实用AsyncHttpClient框架的实现方式:
AsyncHttpClient client = new AsyncHttpClient();  
client.get(url, new AsyncHttpResponseHandler() {  
	@Override  
	public void onSuccess(int i, Header[] headers, byte[] bytes) {  			
		String response = new String(bytes, 0, bytes.length, "UTF-8");  				   
	}  
	@Override  
	public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {  

	}  
});
四、使用WebView视图组件显示网页。
myWebView.getSettings().setJavaScriptEnabled(true);  
myWebView.setWebViewClient(new WebViewClient() {  
	@Override  
	public boolean shouldOverrideUrlLoading(WebView view, String url) {  
		view.loadUrl(url);  
		return true;  
	}  
});  
myWebView.loadUrl("http://"+networkAddress);

小提示:

对于HttpClient和HttpURLConnection我们该怎么选择呢?

在Android 2.2版本之前,由于HttpClient有较少的bug,因此我们选择它来使用。然而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。HttpUrlConnection对大部分工作进行了包装,屏蔽了不需要的细节,体积较小,因而非常适用于Android项目。并且HttpUrlConnection直接在系统层面做了缓存策略处理,可以加快重复请求的速度。由于其压缩(GZip)和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在后续Google官方会将更多的时间放在优化HttpURLConnection上面。

本文转载自:http://blog.csdn.net/wdong_love_cl/article/details/51570961

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
Android Volley框架的几种post提交请求方式

首先简单描述一下Google的Android开发团队在2013年推出的一个网络通信框架Volley.它的设计目标是进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如下载文件等,Volley的...

gaolu
2014/08/08
0
1
Android必备:Android Socket编程的了解与学习整理

看这里:Android必备:Android Socket编程的了解与学习整理 最近学习Android的过程中,由于项目、业务等因素影响,服务端通过Socket进行通信,于是开始学习Socket编程,之前的开发中,很少涉...

Realfighter
2015/03/02
0
0
Android必备:Activity 活动 和 Intent 意图 的学习整理

看这里:Android必备:Activity 活动 和 Intent 意图 的学习整理 在Android必备:Android UI控件的了解与学习中,对AndroidUI做了初步的了解和学习,本篇继续进行Android开发学习的整理。And...

Realfighter
2015/03/04
0
0
Android安全模型之Android安全机制(进程通信)

进程通信是应用程序进程之间通过操作系统交换数据与服务对象的机制。Linux操作系统的传统进程间通信(IPC)有多种方式,比如管道,命令管道,信号量,共享内存,消息队列,以及网络与Unix套接...

柳哥
2014/12/02
0
0
Android IPC 机制【1】--简介

一、android 中进程间通信常用的有以下几种机制 ----------------------------------------------------------------------------------------------------------------------- 名称 优点 缺......

_shieh
2015/11/02
0
0
Android系统源码分析团体项目BeesAndroid正式上线啦

嗨,BeesAndroid开源技术小组正式成立啦,Bees,即蜜蜂,取义分享、合作与奉献的意思,这也是BeesAndroid小组的宗旨,我们第一个团体项目BeesAndroid也于2018年3月6日同步上线,该项目的前 ...

郭孝星
03/08
0
0
volley框架下发送和读取cookie

本文为原创,转载请注明出处,否则将依法追究版权 我们平时开发android应用都需要用到网络技术,通常采用http协议来发起请求并接受网络数据。android系统提供两种方式进行http通信:HttpURL...

刘小米
2014/12/29
0
11
Android Volley 框架JSON中文乱码问题的解决

近期在项目中使用Volley作为网络通信框架,却发现在传输中文时会出现乱码。先交代一下项目的软硬件的基础设施线上:Django+restful_framework+monogdbAPP:Android + volley 在使用android端测...

troy_psl
2015/03/31
0
8
android网络通信之socket教程实例汇总

一、socket基础 1、Socket通讯机制(详细),如何将socket通信的客户端与服务器 http://www.eoeandroid.com/thread-61727-1-1.html 2、Http和Socket区别 http://www.eoeandroid.com/thread-9...

程序袁_绪龙
2014/12/11
0
0
Android客户端与服务器交互方式-小结

最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json。要在Android手机客户端与pc服务器交互,需要满足下面几种条件...

x-knight_勋爵
2016/04/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
5分钟前
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部