【小王的安卓之路】Android原生网络请求
Android原生网络请求
一. 网络请求的必要性
二. 网络请求分类
三. 网络请求实现方法
四. 注意事项
一.网络请求的必要性:
如今单机APP早已经接近消失就连最简单的时钟日期等软件都需要去请求网络来完成同步。我们在制作一个APP时连接网络几乎成了一个必要的条件。
二.网络请求分类:
网络请求主要分为两类:
GET请求: 将请求及其参数追加到url后面来实现请求,主要用来请求数据
POST请求:只发送请求,参数或者其他文件用包的形式单独传递,主要用来提交数据
三.网络请求实现方法
3.1 GET请求
private void requestByGet() {try {URL url = new URL("此处写入你想要请求的url");HttpURLConnection connection =(HttpURLConnection) url.openConnection();connection.setConnectTimeout(30*1000);//设置超时时长,单位msconnection.setRequestMethod("GET");//设置请求格式connection.setRequestProperty("Content-Type","Application/json");//期望返回的数据格式connection.setRequestProperty("CharSet","UTF-8");//设置字符集connection.setRequestProperty("Accept-CharSet","UTF-8");//请求的字符集connection.connect();//发送请求int responseCode =connection.getResponseCode();//获取返回码String responseMessage = connection.getResponseMessage();//获取返回信息if(responseCode==HttpURLConnection.HTTP_OK)//请求成功操作{//TODO }runOnUiThread(new Runnable() //TODO 执行更新UI操作{@Overridepublic void run() {}});} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
3.2 post请求
private void requestByPost(final TextView showText) {try {URL url = new URL("此处写入你想要请求的url");HttpURLConnection connection =(HttpURLConnection) url.openConnection();connection.setConnectTimeout(30*1000);//设置超时时长,单位msconnection.setRequestMethod("GET");//设置请求格式connection.setRequestProperty("Content-Type","Application/json");//期望返回的数据格式connection.setRequestProperty("CharSet","UTF-8");//设置字符集connection.setRequestProperty("Accept-CharSet","UTF-8");//请求的字符集connection.setUseCaches(false);//设置缓存使用connection.setDoInput(true);//设置输入流使用connection.setDoOutput(true);//设置输出流使用connection.connect();String data = "username=" + getEncodeValue("小王") + "&number="+getEncodeValue("123456");OutputStream outputStream = connection.getOutputStream();//获取到输出流outputStream.write(data.getBytes());//写入数据outputStream.flush();//执行outputStream.close();//关闭int responseCode =connection.getResponseCode();String responseMessage = connection.getResponseMessage();if(responseCode==HttpURLConnection.HTTP_OK){//TODO}runOnUiThread(new Runnable() {@Overridepublic void run() {}});} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
四.注意事项
1.进行网络请求需要申请权限,可以是动态的也可以是静态的,这里我们使用静态的。将这句话写在标签上方即可
<uses-permission android:name="android.permission.INTERNET"/>
2.进行网络请求属于耗时操作,应该放在子线程执行。
readButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(new Runnable() {@Overridepublic void run() {requestByGet(showText);}}).start();}
});
3.有时候使用post请求时,你的参数可能不是UTF-8型就会出现乱码。要将参数进行转化。
private String getEncodeValue(String name)
{String encode = null;try {encode= URLEncoder.encode(name,"UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return encode;
}
小结:
虽然现在我们有很多的网络请求框架如OKhttp等,但熟悉原生的网络请求方法也是很有必要的。如果有不对的地方恳请指正!
【小王的安卓之路】Android原生网络请求相关推荐
- 利用Fiddler对Android手机网络请求进行抓包
在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够对Android的网络请求进行抓包,用来定位以及分析我们程序的问题.下面我介绍使用Fiddler对Android模拟器的 ...
- fiddler 只监听模拟器_利用Fiddler对Android模拟器网络请求进行抓包【转】
在Android的开发调试过程中,特别是针对网络编程的情况,很多时候我们希望能够对Android的网络请求进行抓包,用来定位以及分析我们程序的问题.下面我介绍使用Fiddler对Android模拟器的 ...
- App 组件化/模块化之路——如何封装网络请求框架
App 组件化/模块化之路--如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...
- Method-Swizzling实战-实现iOS原生网络请求性能采集
一.方法交换实现步骤(实例方法和类方法处理逻辑类似) 1.检查原类(要被替换方法的类)的原实例方法是否存在,如果不存在,则不交换: 2.检查新类(最终被使用的方法所在的类)的新实例方法是否存在,如果不 ...
- Android okHttp网络请求之缓存控制Cache-Control
前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...
- android之网络请求 -- 获取RecyclerView的列表项(图片 + 文字)
android之网络请求 -- 获取RecyclerView的列表项 示意图,网络请求的地址,插件及依赖 代码架构 代码内容 MainActivity.java activity_main.xml R ...
- 微信小程token_微信小程序-携带Token无感知登陆的网络请求方案
去年写了一个网络请求工具封装的文章 微信小程序~ 网络请求工具的封装 当时没有考虑登陆须要服务器token验证web token 是什么? token 顾名思义就是令牌,也就是一种身份标志.用于和服务 ...
- 『Android』网络请求数据与JSON解析
『Android』网络请求数据与JSON解析
- android之网络请求框架OKhttp、原生http请求
===============原生http===================== public class MainActivity extends AppCompatActivity imple ...
最新文章
- Iframe父页面与子页面之间的相互调用
- 环境变量bootcmd、bootargs的参数含义
- JMETER 用户自定义的变量
- 特斯拉市值站上万亿元大关,BBA如何在“自动驾驶”上做空它?
- [Swift]LeetCode289. 生命游戏 | Game of Life
- python shell 运行时不打印日志_shell编程
- unity相关的javascript脚本:unity圣典学习笔记————MonoBehaviour
- NRF24L01无线通信模块
- 对所有员工的薪水按照salary降序进行1-N的排名
- 2021考研复试面试形式:线上视频面试注意事项?
- 什么高大填空四个字动人_什么发亮填空四字词语
- Serverless Job—— 传统任务新变革
- 《寒江独钓 Windows内核安全》——串口的过滤
- RV32I控制转移指令的偏移量计算问题
- FT6206在STM32上的调试记录
- 我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
- Linux虚拟机无法联网问题解决
- OPUS进行音频编码与解码
- 青年之锋——文学之家
- 用Python制作一个简易的计时器