安卓请求网络的三种方式
在请求网络的时候一般常用的提交方式是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();
}
});
- 快速开发android,离不开这10个优秀的开源项目
作为一名菜鸡Android,时常瞻仰大佬们的开源项目是非常必要的.这里我为大家收集整理了10个优秀的开源项目,方便我们日常开发中学习! 作者:ListenToCode博客:https://www.ji ...
- java:HTML(table表格,ul列表)和CSS(导入.css文件,三种定义颜色方式,三种样式选择器,a标签属性顺序,)
1.重点掌握: html: 1.form表单:input,checkbox,seelct,radio,button,submit 2.table表格:thead-->tr-->th;tbo ...
- Android消息通信 第三方开源项目EventBus 的用法
EventBus是github上的一个第三方开发库,其在github上的项目主页地址:https://github.com/greenrobot/EventBus EventBus的消息模型是消息发布 ...
- Android studio导入开源项目
前几天从github上下载一个开源项目,发现他并不是以前Eclipse那种的目录结构 而是最近在用到的android studio的文件目录.从上图中我们可以看到多次出现了gradle这个单词.And ...
- 网络--三种网络通讯方式及Android的网络通讯机制
Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口).Org.apache接口和Android.net.*(Android网络接口).下面分别介绍这些接口的功 ...
- [ Android 五种数据存储方式之一 ] —— SharedPreferences存储数据
SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. 主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceS ...
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- 二、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Modules的几种加载方式
这一篇梳理Prism中07示例Module的几种加载方式. 07示例分为了5个,有5种不同的Module加载方式. 我们开始学习加载Modules 观察07-Modules-Appconfig示例 分 ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
随机推荐
- 简单介绍一下R中的几种统计分布及常用模型
统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...
- ImageLoader图片加载
http://blog.csdn.net/liu1164316159/article/details/38728259 转载请注明http://write.blog.csdn.net/po ...
- 佛洛依德 c++ 最短路径算法
//20142880 唐炳辉 石家庄铁道大学 #include<iostream> #include<string> using namespace std; #define ...
- 用Python生成组织机构代码,附源码
#!/usr/bin/python import random def haoma(): ww = [3,7,9,10,5,8,4,2]#suan fa yin zi cc = [] dd=0 for ...
- 将自己库添加Cocoapods支持
给库添加Cocoapods支持, 使这个工具使用起来更加方便, 更好的使用Cocoapods, 助力iOS程序开发, 下面进入正题, 想要实现这个过程, 绝对不虚此读. 首先写好一个要添加Cocoap ...
- xml 方式更新和获取 配置文件 appSettings 节点 解决办法
最近在搞一个小程序,会用到动态修改配置文件来进行处理,在百度上找了很多办法,但是始终达不到我预想的效果,先列出程序运行环境和开发工具版本: 开发工具:VS2010 .Net 运行环境:4.0 有两种方 ...
- python os模块(2)
os模块主要用于:目录.文件(删除.判断.分割文件名和后缀) 目录 (1)获取当前目录(2)修改目录(3)生成目录(4)删除目录(5)查看目录下的内容(6)重命名目录(7)修改时间属性(8)链接目录( ...
- MyEclipse中的SVN操作手册
原文出处:http://blog.sina.com.cn/s/blog_8a3d83320100zhmp.html 1.导入项目 点击工具栏上的[File-Import],进入下图 (如果你的对话框中 ...
- Java Web之JavaBean
一.什么是javaBean javaBean是一个遵循特定写法的java类,通常具有如下的特点: 这个java类必须具有一个无参的构造函数. 属性必须私有化. 私有化的属性必须通过public类型的方 ...
- Spire.Office组件使用例子
用.NET开发程序通常要涉及到对Office文件读写操作,比较常见的操作比如提取文本,导出Excel格式数据,动态生成word文档,生成pdf文档等. 实现这些功能通常需要在服务端安装office软件 ...