最后
针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
@Override
public void onFailure(Call call, Throwable t) {
}
});
public interface APi {
@Headers(“apikey:81bf9da930c7f9825a3c3383f1d8d766”)
@GET(“word/word”)
Call getNews(@Query(“num”) String num,@Query(“page”)String page);
}
**到此一个简单的使用retrofit的网络请求就完成了。**接下来我们来了解retrofit的各种请求方式。
Retrofit的get请求
加入我们想请求这样的网址:http://apis.baidu.com/txapi/world/world?num=10&page=1,header为”apikey:81bf9da930c7f9825a3c3383f1d8d766”,我们可以这样请求:
第一步,在interface Api中 增加如下方法
@Headers(“apikey:81bf9da930c7f9825a3c3383f1d8d766”)
@GET(“word/word”)
Call getNews(@Query(“num”) String num,@Query(“page”)String page);
第二部,在代码里面请求
//创建retrofit对象
Retrofit retrofit = new Retrofit.Builder()
//使用自定义的mGsonConverterFactory
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(“http://apis.baidu.com/txapi/”)
.build();
// 实例化我们的mApi对象
mApi = retrofit.create(APi.class);
// 调用我们的响应的方法
Call news = mApi.getNews(number, page);
news.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
News body = response.body();
Logger.i(“onResponse: =”+body.toString());
}
@Override
public void onFailure(Call call, Throwable t) {
Logger.i(“onResponse: =”+t.getMessage());
}
});
解释说明
假设BaseUrl是http://apis.baidu.com/txapi/的前提下
-
1)其中 @GET(“word/word”)会追加到baseUrl :http://apis.baidu.com/txapi/的后面,即变成:http://apis.baidu.com/txapi/world/world
-
2)@Query(“num”) String num,@Query(“page”)String page;分别对应键值的名称与值。会追加到http://apis.baidu.com/txapi/world/world的后面,请求网址即变成:http://apis.baidu.com/txapi/world/world?num=10&page=1
-
3) @Headers(“apikey:81bf9da930c7f9825a3c3383f1d8d766”)是 在基础之上为 其添加响应头
-
4)如果想继续增加参数,只需要在方法参数追加这样的形式就OK了:
,@Query(“page”)String page
@Headers(“apikey:81bf9da930c7f9825a3c3383f1d8d766”)
@GET(“word/word”)
Call getNews(@Query(“num”) String num,@Query(“page”)String page,@Query(“type”) String type);
- 5)加入我们想要请求这样的网址http://apis.baidu.com/txapi/tiyu/tiyu?num=10&page=1,,我们可以这样写
@Headers({“apikey:81bf9da930c7f9825a3c3383f1d8d766” ,“Content-Type:application/json”})
@GET(“{type}/{type}”)
Call tiYu(@Path(“type”) String type, @Query(“num”) String num,@Query(“page”)String page);
String type=“tiyu”;
Call news = api.tiYu(type,number, page);
retrofit的post请求
假如我们想要 请求这样的网址http://apis.baidu.com/txapi/world/world?以post的 方式提交这样的 数据:num=10&page=1,我们可以写成 如下的 样子,注意post的时候必须使用@Field这种形式的注解,而不是使用@Query这种形式的注解,其他的 与get请求一样,这样只给出核心代码
@FormUrlEncoded
@Headers({“apikey:81bf9da930c7f9825a3c3383f1d8d766” ,“Content-Type:application/json”})
@POST(“world/world”)
Call postNews(@Field(“num”) String num, @Field(“page”)String page);
如何为retrofit添加请求头head
总共有以下几种方式
第一种方法
在OKHttpClient interceptors里面进行处理,这样添加的headKey不会覆盖掉 前面的 headKey
okHttpClient.interceptors().add(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
// Request customization: add request headers
Request.Builder requestBuilder = original.newBuilder()
.addHeader(“header-key”, “value1”)
.addHeader(“header-key”, “value2”);
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
第二种方法
同样在在OKHttpClient interceptors里面进行处理,这样添加的headKey会覆盖掉 前面的 headKey
okHttpClient.interceptors().add(new Interceptor() {
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request original = chain.request();
// Request customization: add request headers
Request.Builder requestBuilder = original.newBuilder()
.header(“headerkey”, “header-value”); // <-- this is the important line
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
第三种方法
利用 retrofit自带的注解,比如我们想要添加这样的请求头:”apikey:81bf9da930c7f9825a3c3383f1d8d766” ,”Content-Type:application/json”;则可以写成如下的 样式
@Headers({“apikey:81bf9da930c7f9825a3c3383f1d8d766” ,“Content-Type:application/json”})
@GET(“world/world”)
Call getNews(@Query(“num”) String num,@Query(“page”)String page);
通过post提交json数据
Post 提交JSON数据
有时提交的数据量比较大时,用键值对的方式提交参数不太方便,Retrofit可以通过@Body注释,直接传递一个对象给请求主体,Retrofit通过JSON转化器,把对象映射成JSON数据。
假设我们需要提交的数据为
{
“id”: 1,
“text”: “my task title”
}
- 接口定义:
public interface TaskService {
@Headers({“Content-Type: application/json”,“Accept: application/json”})
@POST(“/tasks”)
Call createTask(@Body Task task);
}
- 传递实体需要有Model:
建议
当我们出去找工作,或者准备找工作的时候,我们一定要想,我面试的目标是什么,我自己的技术栈有哪些,近期能掌握的有哪些,我的哪些短板 ,列出来,有计划的去完成,别看前两天掘金一些大佬在驳来驳去 ,他们的观点是他们的,不要因为他们的观点,膨胀了自己,影响自己的学习节奏。基础很大程度决定你自己技术层次的厚度,你再熟练框架也好,也会比你便宜的,性价比高的替代,很现实的问题但也要有危机意识,当我们年级大了,有哪些亮点,与比我们经历更旺盛的年轻小工程师,竞争。
-
无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!!!!!!!!
-
准备想说怎么样写简历,想象算了,我觉得,技术就是你最好的简历
-
我希望每一个努力生活的it工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。
-
有什么问题想交流,欢迎给我私信,欢迎评论
【附】相关架构及资料
内含往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-i68doC5y-1715749944879)]
[外链图片转存中…(img-RG5BvcGG-1715749944879)]
内含往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!