Android 给服务器发送网络请求
今天听得有点蒙,因为服务器的问题,这边建立服务器的话,学长用的是Idea建立的Spring之类的方法去搞服务器。
然后就是用Android去给这个服务器发送请求,大致效果还是懂的,就是像网站发送请求,然后登录网站。
我们用http协议访问网络:
它的工作原理特别简单,就是客户端向服务器发出一条 HTTP请求,服 务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理就可以了。
我们主要用的是HttpURLConnection请求。
我们连接网络得如下写法:下面选择的第一句就是连接网络,第三句是使用明文流量,
什么是 android:usesCleartextTraffic
android:usesCleartextTraffic 指示应用程序是否打算使用明文网络流量,例如明文HTTP。目标API级别为27或更低的应用程序的默认值为“ true”。面向API级别28或更高级别的应用默认为“ false”。
当属性设置为“ false”时,平台组件(例如,HTTP和FTP堆栈,DownloadManager和MediaPlayer)将拒绝应用程序使用明文流量的请求。强烈建议第三方库也采用此设置。避免明文通信的主要原因是缺乏机密性,真实性和防篡改保护;网络攻击者可以窃听所传输的数据,并且还可以对其进行修改而不会被检测到。
大概意思就是安全性的问题,我认为还是必须得写的。

我们可以先写个活动,连接到百度,发送请求并获取百度的信息:
这里面的句柄(handler)可以忽略不看,
至于handler是啥,大牛的网站献上:
https://blog.csdn.net/zjpp2580369/article/details/81290620
handler.post()其实和runOnUiThread的功能差不多,让子线程连接到主线程。
请求的话我们一般的固定写法就是先:
URL url = new URL("http://www.baidu.com");//它会报异常,抓一下或者抛都行。
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //这一步就是发送http请求。
我们写这个就是为了在服务器上获取数据,所以我们用post。
接着因为要获取,得调用输入流,把网站传过来的数据用字节形式存下来
这是学java的字节IO流的固定套路,就是循环读入数组,接着就是根据
数组放入String变量里,从0-len意思就是全部读入。
最后吧信息写到message文本控件里
。那么这里为什么要用这个 runOnUiThread()方法呢?
这是因为 Android是不允许在子线程中进行 UI操作的,我们需要通过这个方法将线程切换到主线程,然后 再更新 UI 元素。不过我们现在并没有操作很多东西,就没在里面写内容了。
最后说一下为啥要新建个线程,因为网络这块好像不能在主线程里写。所以要新建一个线程,而我们UI操作却要到主线程里,所以切换到主线程的时候得想到runOnUiThread;

我们的布局也不贴了,就是一个文本控件,然后在活动得到信息。
最后就是得到一个百度的html代码;

上代码:先上布局,布局用ScrollView:
因为我们要用请求得到网站的东西可能会很多,一页看不完。

上边是写个登录的界面,上活动:

看起来挺复杂的。
这个活动里的OnCreate里还是挺简单的,就是连接布局并连接控件。
我们连接控件并且调用自己写的登录方法,
请求的话我们一般的固定写法就是先:
URL url = new URL("http://www.baidu.com");//它会报异常,抓一下或者抛都行。
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //这一步就是发送http请求。
这种写法,学长写的地址是测试自己写的服务器的,不过10.0.2.2是哪个地址?
因为模拟器和安卓使用的本地ip不是计算机的127.0.0.1,它是自己自带的地址,我们如果写localhost或者回路地址的话是找不到的,后面的两个是服务器里写的参数,我们相当于调用了个方法,把参数传过去。
我们还可以用很多连接时对网站的定制方法,比如请求的方式:
connection.setRequestMethod("GET"); //获取网站的信息,好像是默认的,post就是提交信息上去。
connection.setConnectTimeout(8000);//这两个分别是连接超时和读取超时,都是毫秒。
connection.setReadTimeout(8000);
我们写这个就是为了在服务器上获取数据,所以我们用post。
接着因为要获取,得调用输入流,把网站传过来的数据用字节形式存下来
这是学java的字节IO流的固定套路,就是循环读入数组,接着就是根据
数组放入String变量里,从0-len意思就是全部读入。
最后吧信息写到message文本控件里
。那么这里为什么要用这个 runOnUiThread()方法呢?
这是因为 Android是不允许在子线程中进行 UI操作的,我们需要通过这个方法将线程切换到主线程,然后 再更新 UI 元素。不过我们现在并没有操作很多东西,就没在里面写内容了。
最后说一下为啥要新建个线程,因为网络这块好像不能在主线程里写。所以要新建一个线程,而我们UI操作却要到主线程里,所以切换到主线程的时候得想到runOnUiThread;

总结:主要是理解Android请求网络的步骤和方法,以及一些基础步骤的运行。
Android 给服务器发送网络请求的更多相关文章
- Android探索之HttpURLConnection网络请求
前言: 最近一直想着学习一下比较好的开源网络框架okhttp,想着学习之前还是先总结一下Android原生提供的网络请求.之前一直在使用HttpClient,但是android 6.0(api 23) ...
- Android - 向服务器发送数据(POST) - HTTPClient.
该篇文章主要说明使用Apache提供的HTTPClient,通过post方式,向服务器发送数据.由于有些东西在 Android - 向服务器发送数据(GET)中提到过,就不再重复. 一,Android ...
- python 学习笔记之手把手讲解如何使用原生的 urllib 发送网络请求
urllib.urlopen(url[,data[,proxies]]) : https://docs.python.org/2/library/urllib.html python 中默认自带的网络 ...
- nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token
最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...
- pythone函数基础(13)发送网络请求
需要导入urllib模块,request模块发送网络请求有两种方法 第一种方法# from urllib.request import urlopen# from urllib.parse impor ...
- 如何实现 Https拦截进行 非常规“抓包” 珍惜Any 看雪学院 今天 前段时间在自己做开发的时候发现一个很好用的工具,OKHttp的拦截器(何为拦截器?就是在每次发送网络请求的时候都会走的一个回调)大概效果如下:
如何实现 Https拦截进行 非常规“抓包” 珍惜Any 看雪学院 今天 前段时间在自己做开发的时候发现一个很好用的工具,OKHttp的拦截器(何为拦截器?就是在每次发送网络请求的时候都会走的一个回调 ...
- Android 的OkHttp(发送网络请求)
今天讲的是和HttpURLConnection差不多的OkHttp; 先把网站献上: 官网介绍okhttp的: https://square.github.io/okhttp/ 下载postman的: ...
- Android - 向服务器发送数据(GET).
在此,使用HTTP协议,通过GET请求,向服务器发送请求,这种方式适合于数据量小,数据安全性要求不高的情况下. 一,服务器端,使用Servlet. 在服务器端,定义一个HttpServlet的子类,以 ...
- 使用tcpdump+Wireshark(或Fiddler)做linux服务器的网络请求分析
我们的服务器上,一般都没有窗口界面,这时候要抓包,用tcpdump是最方便的.而分析网络请求时,wireshark又是相当方便的,这时候我们就需要把它们两个一起来使用了. tcpdump 抓取数据 命 ...
随机推荐
- shaderlab - 9chapter-阴影
原理 相机和光源重合,相机能看到的表面,形成的深度图--叫做,阴影纹理(shadowMap). 传统的,用base和add更新深度信息,但是,此处需求是深度信息而已,掺杂了光的计算了,所以,unity ...
- C#生成Excel文档(EPPlus)
1.公式计算 worksheet.Cells["D2:D5"].Formula = "B2*C2";//这是乘法的公式,意思是第二列乘以第三列的值赋值给第四列, ...
- JavaScript 基础 学习 (二)
JavaScript 基础 学习 节点属性 每一个节点都有自己的特点 这个节点属性就记录着属于自己节点的特点 1. nodeType(以一个数字来表示这个节点类型) 语法:节点.nodeT ...
- 大厂程序员教你如何学习C++(内附学习资料)
目前准备面试同学都知道,C++是百度和腾讯的主流开发语言,而java是阿里的主流开发语言. 对于初学者来说,也不用纠结究竟学习c++还是java 其实只要好好掌握好一门即可,另一门即可融会贯通 因为我 ...
- javascript : 点击按钮,把某标签中的内容复制到剪贴板
需求如题. 静态页面如下. 需要的库:jquery(不用应该也能做). 浏览器:PC chrome 68 Mobile MIUI9.5(Android 7) <p>1.用电脑打开网址:&l ...
- STL源码剖析:迭代器
准备知识 什么是迭代器? 迭代器是链接容器和算法的桥梁,所有的算法都通过迭代器操作容器中的数据 迭代器是一种智能指针,最重要的操作符重载就是operator*,operator-> 迭代器的实现 ...
- MySQL数据库---前言
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS ...
- 题解 洛谷 P6351 【[PA2011]Hard Choice】
删边操作不好处理,所以先将操作倒序,将删边转化为加边. 考虑对于两个点的询问,若这两点不连通或这两个点分别处于两个不同的边双连通分量中(两点间存在桥)时,是不满足题目要求的. 可以用\(LCT\)来维 ...
- Spring Boot使用AOP的正确姿势
一.为什么需要面向切面编程? 面向对象编程(OOP)的好处是显而易见的,缺点也同样明显.当需要为多个不具有继承关系的对象添加一个公共的方法的时候,例如日志记录.性能监控等,如果采用面向对象编程的方法, ...
- 新款iPad Pro4的电池续航和充电速度对比
3月18日晚苹果官网上架了两款新iPad Pro,两款iPad Pro 2020外观大小分别为11英寸和12.9英寸,搭载苹果A12Z仿生芯片,起售价分别为6288元和7899元.那么两款iPad P ...