赞
踩
添加网络请求权限
添加依赖
implementation("com.squareup.okhttp3:okhttp:4.9.3")
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //发起请求 //无需手动创建子线程,框架默认帮我们创建 //1.创建一个okhttp对象 OkHttpClient okHttpClient=new OkHttpClient(); //2.创建一个Request对象,里面存放请求到的数据,调用Request类里的builder()方法,相当于调用了Request的静态方法 //.url请求的地址 //.get() 请求的方式 常用的请求方法1.get() 2.post() 这个由后端的接口决定 //.build() Request request=new Request.Builder() .url("http://121.4.44.56/object") .get() .build(); //3.将数据放到okHttpClient对象中 Call call = okHttpClient.newCall(request); //enqueue一个队列,程序可以发起多个请求,将这些请求存在队列中一个一个的处理 call.enqueue(new Callback() { @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { //请求失败 } @Override public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { //请求成功,通过response对象返回请求到的数据 String result=response.body().string(); Log.i("onResponse", "onResponse: "+result); } }); } }
由此我们可以知道okhttp框架相较于传统的网络请求的优势:
优势一:无需自己创建子线程,okhttp自动帮我们创建
优势二:返回的数据不再是数据流,而是转换好的string字符串
优势三:自动处理异常情况,提供
onFailure()
方法
打印测试结果:
这是返回的数据还是没有经过解析的,我们可以使用上节课的GSON搭配实体类插件GsonFormatPlus
来解析数据
第一步:添加gson依赖
//添加GSON依赖
implementation 'com.google.code.gson:gson:2.9.0'
第二步:创建实体类
我们可以复制json数据,通过实体类插件GsonFormatPlus
快速创建
第三步:解析数据
//GSON搭配实体类插件`GsonFormatPlus`来解析数据
Gson gson=new Gson();
Student student=gson.fromJson(result,Student.class);
第四步:设置到文本控件上显示
我们先得给文本控件取一个id,为了方便查看,我设置了文本的大小和颜色
然后将解析出的数据设置到文本控件上
同样的在okhttp中我们需要切换线程到主线程来设置数据到控件上,说明okhttp框架只帮我们解决了构建子线程的问题,线程切换还是需要自己实现
运行可以看到名字已经解析出来并显示在虚拟机上
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView txtView = findViewById(R.id.txtVId1); //发起请求 //无需手动创建子线程,框架默认帮我们创建 //1.创建一个okhttp对象 OkHttpClient okHttpClient=new OkHttpClient(); //2.创建一个Request对象,里面存放请求到的数据,调用Request类里的builder()方法,相当于调用了Request的静态方法 //.url请求的地址 //.get() 请求的方式 常用的请求方法1.get() 2.post() 这个由后端的接口决定 //.build() Request request=new Request.Builder() .url("http://121.4.44.56/object") .get() .build(); //3.将数据放到okHttpClient对象中 Call call = okHttpClient.newCall(request); call.enqueue(new Callback() {//enqueue一个队列,程序可以发起多个请求,将这些请求存在队列中一个一个的处理 @Override public void onFailure(@NonNull Call call, @NonNull IOException e) { //请求失败,打印解析失败原因 Log.i("onFailure", "onFailure: "+e.getMessage()); } @Override public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { //请求成功,通过response对象返回请求到的数据 //子线程 String result=response.body().string(); Log.i("onResponse", "onResponse: "+result); //GSON搭配实体类插件`GsonFormatPlus`来解析数据 Gson gson=new Gson(); Student student=gson.fromJson(result,Student.class); //抛出到主线程 runOnUiThread(new Runnable() { @Override public void run() { txtView.setText(student.name); } } ); } }); //优势一:无需自己创建子线程 //优势二:返回的数据不再是数据流,而是转换好的string字符串 //优势三:自动处理异常情况,提供`onFailure()`方法 } }
=======================================================================
fastmock可以让你在没有后端程序的情况下能真实地在线模拟ajax请求,你可以用fatmock实现项目初期纯前端的效果演示,也可以用fastmock实现开发中的数据模拟从而实现前后端分离。
===========================================================================
网络请求-》java-》OKHTTP-》Retrofit
数据解析-》java解析-》GSON配合插件解析
Retrofit
是对http网络请求框架的封装,一般由okhttp
来负责网络请求,retrofit
对请求接口
进行封装。retrofit
通过接口和注解来描述我们的网络请求,然后通过client
去调用okhttp
框架,通过addConverterFactory
来实现对返回的json数据进行处理,转换成我们需要的数
据类型,可以理解为okhttp的加强版,底层封装了Okhttp。
//添加okhttp依赖/
implementation("com.squareup.okhttp3:okhttp:4.9.3")
//添加Retrofit依赖
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
创建一个接口,返回值是Call类型,使用泛型封装Student类,注意引入包不要用okhttp的
import retrofit2.Call; import retrofit2.http.GET; public interface Api { //http://121.4.44.56/object //使用get注解,放入请求的地址的最后一部分,前面的部分会在别处拼接 @GET("object") Call<Student> getStudent(); }
回到MainActivity方法,将之前写的用okhttp框架的所有代码注释,以及删除对于的所有包
使用Retrofit框架来实现同样的功能
值得注意的是Retrofit框架在okhttp的基础上进一步封装,我们无需手动解析数据,也无需抛出线程
//使用Retrofit框架 //1..创建一个Retrofit对象 Retrofit retrofit=new Retrofit.Builder() .baseUrl("http://121.4.44.56/") .addConverterFactory(GsonConverterFactory.create())//表示以GSON框架解析数据 .build(); **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。** **深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!** **因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。** ![img](https://img-blog.csdnimg.cn/img_convert/57eb8a1b90d19650345c83d559cd6377.png) ![img](https://img-blog.csdnimg.cn/img_convert/94e482a212f3caeef4d0c27501cc9db7.png) ![img](https://img-blog.csdnimg.cn/img_convert/2f9b37b3f313ff8a8061d56670d3e91c.png) ![img](https://img-blog.csdnimg.cn/img_convert/2036bc59605c44a1cc4674d9c787e9dc.png) ![img](https://img-blog.csdnimg.cn/img_convert/751dbe4efd8ccb6ec554716d577fe845.png) ![img](https://img-blog.csdnimg.cn/img_convert/7290d1d5d1faf8d857c55ead65e2f183.png) ![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png) **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!** **由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新** **如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)** ![img](https://img-blog.csdnimg.cn/img_convert/c77257e100319e72de2f2a200efdf5f8.png) ### Android高级架构师 由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。 * **330页PDF Android学习核心笔记(内含上面8大板块)** ![](https://img-blog.csdnimg.cn/img_convert/b5dfc92751243e9acbbf7f6338e47fc5.webp?x-oss-process=image/format,png) ![](https://img-blog.csdnimg.cn/img_convert/618a81ace1853c0ed6372080f75a95c7.webp?x-oss-process=image/format,png) * **Android学习的系统对应视频** * **Android进阶的系统对应学习资料** ![](https://img-blog.csdnimg.cn/img_convert/9305417e3a882c556042d4fe4eb5372c.webp?x-oss-process=image/format,png) * **Android BAT部分大厂面试题(有解析)** ![](https://img-blog.csdnimg.cn/img_convert/88e46eff32ef35f90ad042146aaf684e.webp?x-oss-process=image/format,png) 好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。 得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)** [外链图片转存中...(img-SLkm1pUW-1712017104167)] ### Android高级架构师 由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。 * **330页PDF Android学习核心笔记(内含上面8大板块)** [外链图片转存中...(img-rGYlA4V7-1712017104167)] [外链图片转存中...(img-ePylqXuP-1712017104167)] * **Android学习的系统对应视频** * **Android进阶的系统对应学习资料** [外链图片转存中...(img-8iFZZPeY-1712017104168)] * **Android BAT部分大厂面试题(有解析)** [外链图片转存中...(img-xwUtaMFN-1712017104168)] 好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。 > **本文已被[CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。