一个多月没写博客了,天天忙到凌晨.具体内容是准备近期的培训资料.这种生活要持续到春节之前.经常感慨上年纪了记忆力衰退的很厉害.许多事情回头就忘的一干二净,额米豆腐.
正好昨天刚整理了一下网络通讯的内容,今天写写吧,算是给2014年留下一个尾巴的脚步.
Android通讯和java普通通讯没什么两样,不是tcp就是udp,通讯方式也无就是socket、http和soap.最节省资源的方式个人建议还是http比较好,结合json现在更加流行.
归纳一下,如果只是get请求,不需要提交表单也不需要安全性,只要拼接地址就可以访问的情况
Url实现方式/** 获取远程文字
* @param path
* @return
*/
public String getNetText(String path){
try {
//创建连接远程地址
URL url = new URL(CommonSettings.SERVERPATH+path);
//得到连接,注意类型
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//最大超时响应时间,ANR最大5秒,你自己设置
conn.setConnectTimeout(2000);
conn.setReadTimeout(2000);//最大读取时间
conn.setRequestMethod("GET");//请求方式
InputStream is = conn.getInputStream();//得到字节输入流
//添加缓冲
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder builder =new StringBuilder();
while(true){
String str = br.readLine();
if(str==null) break;
builder.append(str+"\n");
}
br.close();
is.close();
conn.disconnect();
//去掉最后的换行符
return builder.substring(0, builder.length()-1).toString();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
如果需要表单提交,那get和post就要分开了,get方式写的比较麻烦,其实用List更简单
Get实现方式/**
* doGet提交
* @param url 提交地址
* @param params提交参数字典
* @return 服务器返回结果
*/
public String doGet(String url, Map<String, String> params) {
String result = null;
// 拼接参数 得到枚举器
Iterator<Entry<String, String>> iter = params.entrySet().iterator();
StringBuilder builder = new StringBuilder();
while (iter.hasNext()) {
Entry<String, String> entry = iter.next();// 得到下一个对象
if (entry == null)
break;
String key = entry.getKey();// 关键字
String value = entry.getValue();// 值
// 拼接
builder.append(key).append("=").append(value).append("&");
}
// 创建请求对象地址
HttpGet get = new HttpGet(url + "?" + builder.toString());
try {// 得到服务器输出
HttpResponse response = httpClient.execute(get);
result = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
好吧,使用post直接丢了一个列表
Post实现方式/** 提交post表单
* @param url 请求地址
* @param params参数,注意类型是List范型NameValuePair
* @return
*/
public String doPost(String url, List<NameValuePair> params) {
String result = null;
HttpPost post = new HttpPost(url);//因为get请求的内容需要拼接地址,post的内容在表单中
try {
post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse response = httpClient.execute(post);
result = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
因为Android默认通讯编码是UTF-8的,别忘记服务器端的编码处理调整一致就好了
还有通讯时,别忘了主线程禁止访问网络,开独立子线程或者Executors的线程池结合handler实现,当然更简单可以用AsyncTask
最容易出错的处理,HttpClient在Apache的官方包里有两个,一个类一个接口,我们使用的是接口,也就是
org.apache.http.client.HttpClient
提前祝各位元旦快乐,2014年过去了,我怀念它!
来学习一下!
技术流,看不懂代码的路过……
有几个是垃圾评论吧