博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android两种基本联网方式与一种第三方开源项目的使用
阅读量:5172 次
发布时间:2019-06-13

本文共 5932 字,大约阅读时间需要 19 分钟。

安卓请求网络的三种方式
在请求网络的时候一般常用的提交方式是
post
或者
get
请求,
post
请求安全,传输大小无限制,但是代码量多些,
get
请求是浏览器有大小限制,用户提交的信息在浏览器的地址栏显示出来因此不安全
Android
中联网请求需要添加权限,
4.0
以后需要开启一个线程,在网络请求的时候都是以流的方式传输的
第一步使用系统
URL
的方式联网
(熟练地了解,当服务器需要传入特殊的请求头时候需要使用这种)
 
get
关于names与passwords是用户输入要提交的数据
// 1.
设置连接的网络地址,
get
请求就是拼接用户提交的内容到
URL重点注意事项:在安卓测试中
ip
地址不可写
localhost
因为安卓手机无法识别本地回环地址,必须是指定的
ip
地址,否则执行到获取响应码一行时不执行,不报错等,服务器拿不到提交的信息,
也不会做出任何的反馈,所以执行到获取反馈时无任何执行
String path = "http://172.17.25.55:8080/login/LoginServlet?username="+ names + "&password=" + passwords;
// 2.
创建一个
URL
的连接实例
URL url = new URL(path);
// 3.
通过
URL
的连接实例打开一个连接强转成
HttpURLConnection
HttpURLConnection httpurlconn = (HttpURLConnection) url.openConnection();
// 
然后设置请求的方式,这里一定要大写,
GET
httpurlconn.setRequestMethod("GET");
// 
利用强转后的连接设置请求响应超时
httpurlconn.setConnectTimeout(5000);
// 
获取服务器返回的响应码
int responseCode = httpurlconn.getResponseCode();
// 
如果响应码是
200
就是成功,
206
是部分成功,
404
找不到页面,
504
等是服务器内部错误
if (responseCode == 200) { 
// 
响应成功后拿到服务器返回的数据,服务器返回是以字节流的形式返回
InputStream ins = httpurlconn.getInputStream();
// 
读取内容展示由于联网是需要开线程的而
UI
不允许子线程更新所以在
UI
线程写个方法在
UI
线程更新
}
 
post
关于names与passwords是用户输入要提交的数据
 
//1.
请求路径 ☆☆☆☆☆☆☆重点注意事项:在安卓测试中
ip
地址不可写
localhost
因为安卓手机无法作为服务端,所以无法使用本地回环地址,必须是指定的
ip
地址,否则执行到获取响应码一行时不执行,不报错等,
服务器拿不到提交的信息,也不会做出任何的反馈,所以执行到获取反馈时无任何执行
String path = "http://172.17.25.55:8080/login/";
// 2.
创建一个
URL
的连接实例
URL url = new URL(path);
// 3.
通过
URL
的连接实例打开一个连接强转成
HttpURLConnection 
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// 
利用强转后的连接设置请求响应超时
con.setConnectTimeout(5000);
// 
然后设置请求的方式,这里一定要大写
GET☆☆☆☆
con.setRequestMethod("POST");
// 
请求体内容☆☆☆☆☆☆☆
String data = "username=" + names + "&password="+ passwords;
//
请求方式是固定的必须这么写包括大小写这个是☆☆☆☆☆☆☆
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//
请求体(内容)的长度固定的必须这么写包括大小写这个是☆☆☆☆☆
con.setRequestProperty("Content-Length", data.length()+"");
con.setDoOutput(true);// 
设置一个标记允许输出数据☆☆☆☆☆
//
写入数据把我们组拼好的数据提交给服务器以流的形式提交 ☆☆☆☆
con.getOutputStream().write(data.getBytes())
int responseCode = con.getResponseCode();
// 
如果响应码是
200
就是成功,
206
是部分成功,
404
找不到页面,
504
等是服务器内部错误
if (responseCode == 200) {
// 
响应成功后拿到服务器返回的数据,服务器返回是以字节流的形式返回
InputStream ins = httpurlconn.getInputStream();
// 
读取内容展示由于联网是需要开线程的而
UI
不允许子线程更新所以在
UI
线程写个方法在
UI
线程更新
}
第二步使用系统结借鉴Alpha的封装好的类(了解即可)原因是请求头信息封装好了但是过于复杂,第三方完全可以更好的替代
//[2.1]
定义
get
方式要提交的路径小细节如果提交中文要对
name 
和 
pwd 
进行一个
urlencode 
编码 
Get
// 1.
设置连接的网络地址,利用
URLEncoder
编码用户提交的数据这样中文就能够提交了,而且用户的信息有一些保障
关于
names与passwords是用户提交的数据
String path ="http://172.17.25.55:8080/login/LoginServlet?username="+ URLEncoder.encode(names,"utf-8") + "&password=" +URLEncoder.encode(passwords,"utf-8") ;
//2.
获取httpclient实力直接
new它的子类
DefaultHttpClient dehttp = new DefaultHttpClient();
//3.
准备
get
请求
HttpGet get = new HttpGet(path);
//4.
执行一个请求返回的是服务器响应结果
HttpResponse httpresponse = dehttp.execute(get);
//5.
拿到服务器响应码
int statusCode = httpresponse.getStatusLine().getStatusCode();
if(statusCode==200){
//6.
获取服务器返回的数据以实体的形式返回
InputStream content = httpresponse.getEntity().getContent();
//7.
读取展示结果
}
Post 
String path = "http://172.17.25.55:8080/login/LoginServlet";
//2.
获取httpclient实力直接
new
他的子类
DefaultHttpClient dehttp = new DefaultHttpClient();
//3
准备 
post
请求
HttpPost post = new HttpPost(path);
//4.开始准备
post
提交的正文,以键值对的形成
/4.1
准备一个集合存放
NameValuePair
List<NameValuePair> an = new ArrayList<NameValuePair>();
//4.2创建
NameValuePair
子类实现是
BasicNameValuePair
//
创建需要提交的数据以
key value
的形式提交
key
是服务器根据去取的
key
BasicNameValuePair bnp1 = new BasicNameValuePair("username",names);
BasicNameValuePair bnp2 = new BasicNameValuePair("password",passwords);
//4.3添加到集合中
an.add(bnp1);
an.add(bnp2);
//4.4准备
entity
实体 
new
一个子类实现
UrlEncodedFormEntity
//UrlEncodedFormEntity
需要的是一个
List<? extends NameValuePair>
UrlEncodedFormEntity uf = new UrlEncodedFormEntity(an);
//4.5设置实体
post.setEntity(uf);
//5.
执行一个请求返回的是服务器响应结果
HttpResponse httpresponse = dehttp.execute(post);
//6.
拿到服务器响应码
int statusCode = httpresponse.getStatusLine().getStatusCode();
if(statusCode==200){
//7.
获取服务器返回的数据以实体的形式返回
InputStream content = httpresponse.getEntity().getContent();
//8.
读取展示结果
}
第三步使用开源项目Asynhttpclient(熟练掌握)
注意:使用
Asynhttpclient
需要导入第三方的
com
包,导完后报错,一个市报名错误删除即可还有一个是没有导包,导入包即可使用 
关于
names与passwords是用户提交的数据 
Get
// 1.
设置连接的网络地址,利用
URLEncoder
编码用户提交的数据这样中文就能够提交了,而且用户的信息有一些保障
String path = "http://172.17.25.55:8080/login/LoginServlet?username="
+ URLEncoder.encode(names,"utf-8") + "&password=" +URLEncoder.encode(passwords,"utf-8") ;
//2.创建一个asynchttp
AsyncHttpClient ashttp = new AsyncHttpClient();
//3.进行
get
请求传入一个路径,与一个
AsyncHttpResponseHandler
响应线程
ashttp.get(path,new AsyncHttpResponseHandler() {
//
请求成功的回调方法
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
//responseBody
服务器返回的正文
statusCode
服务器返回的状态码,  
Header
服务器返回的响应头信息
try {
Toast.makeText(MainActivity.this,new String(responseBody,"gbk"), 0).show();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
//
请求失败回调的方法
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
Toast.makeText(MainActivity.this,new String(responseBody), 0).show();
}
});
Post
String path = "http://172.17.25.55:8080/login/LoginServlet";
// 
创建一个asynchttp
AsyncHttpClient ashttp = new AsyncHttpClient();
//
准备请求体内容
RequestParams params = new RequestParams();
params.put("username", names);
params.put("password", passwords);
//
请求一个
post
请求
ashttp.post(path, params ,new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
try {
Toast.makeText(MainActivity.this,new String(responseBody, "gbk"), 0).show();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
@Override
public void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {
Toast.makeText(MainActivity.this, new String(responseBody),0).show();
}
});

 

转载于:https://www.cnblogs.com/lizhanqi/p/5607644.html

你可能感兴趣的文章
13组件与容器
查看>>
文件操作
查看>>
spring容器启动的加载过程(三)
查看>>
jdbc连接数据库代码
查看>>
loadrunner使用system()函数调用Tesseract-OCR识别验证码遇到的问题
查看>>
【XSY2731】Div 数论 杜教筛 莫比乌斯反演
查看>>
flash 随机函数
查看>>
一些命令及参数
查看>>
Bootstrap validation
查看>>
2017.4.18-morning
查看>>
When Startup Disk is Full
查看>>
mysql的常用引擎
查看>>
安排考场,贪心
查看>>
删除小于一定尺寸的模型
查看>>
Python全栈_Day5_用户、群组、权限
查看>>
MFC-CFileException类学习笔记
查看>>
<MySQL学习十四>创建和操纵表
查看>>
Project Euler Problem 28
查看>>
ACE6.3.3在Linux(CentOS7.0)下的安装和使用
查看>>
面试准备
查看>>