Retrofit2的基本用法
来源:互联网 发布:h5 js 实现滑动效果 编辑:程序博客网 时间:2024/05/04 07:33
首先什么是Retrofit?
Retrofit是针对于Android/Java的、基于okHttp的、一种轻量级且安全的、并使用注解方式的网络请求框架。
Retrofit它有哪些好处和优势呢
Retrofit使用注解方式简化了我们的URL拼写形式,而且注解含义一目了然,使用起来也非常简单,支持同步和异步执行,使得请求变得异常简单,只要调用enqueue/execute即可.
这里先说一下Retrofit中的注解,其中HTTP注解有五个,用来修饰请求方法:
@GET @POST @PUT @DELETE @HEAD
这五个注解正好涵盖了数据的增删改查方法,每一个请求方法都必须要由这五个注解中的一个修饰。
这里我们就主要说一说最常用的@GET @POST的用法
假设我们请URL为:http://ip.taobao.com/service/getIpInfo.php?ip=202.202.32.202
使用方法呢我们首先要定义一个接口
public interface MyService1 { //?参数为?前面的到 /(斜杠)之间的值 @GET("getIpInfo.php") //Get中的注解用@Query Call<IP> getIP(@Query("ip") String ip); /*********************************************************************************/ @FormUrlEncoded @POST("getIpInfo.php") //Post中的注解一定要用@Field不能用@Query Call<IP> postIP(@Field("ip") String ip);}上面代码中分别定义了GET和POST两种请求类型,可以看出定义的方法基本是相同的。但是,我们会发现括号中的注解不相同。那么括号中的注解是干什么的呢,简单点说其实就是前面的注解和后面的参数其实就相当于Key和Value,结合上面的URL地址可以看出,注解中的内容为ip这正是我们地址上参数的Key。而后面的String ip就是我们要填写的Value.
还有就是括号中的两种注解是分别用在两种不同的请求上的,@GET对应的是@Query,@POST对应的是@Fiele。千万不能用混了!千万不能用混了!千万不能用混了!说三遍。
那么我们的接口定义完了,现在要开始实例化retrofit,配置好请求地址和解析方式
//实例化retrofit,配置好请求地址和解析方式 Retrofit retrofit = new Retrofit.Builder() //★Retrofit2 的baseUlr 必须以 /(斜线) 结束,不然会抛出一个IllegalArgumentException .baseUrl("http://ip.taobao.com/service/") .addConverterFactory(GsonConverterFactory.create())//设置将json解析为javabean所用的方式 .build(); //通过retrofit创建第一步定义的接口的实例, //供在外部直接通过该实例调用该接口的getIPad方法,完成网络请求 MyService1 mservice = retrofit.create(MyService1.class); //调用getIP(或者postIP)方法得到Call// final Call<IP> call = taobaoIPService.getIP("202.202.32.202"); final Call<IP> call = mservice.postIP("202.202.32.202");上面的注释写的很详细了,这里就不多说了,这里有一个概念就是最后的到的call是什么。
Call是Retrofit中重要的一个概念,代表被封装成单个请求/响应的交互行为,我的理解就是通过它的方法把你的接口转换成了Http请求。然后我们可以调用它的execute和enqueue方法分别发送同步和异步请求
下面是开始异步请求
// call.enqueue开启异步网络请求 call.enqueue(new Callback<IP>() { @Override //请求成功 public void onResponse(Response<IP> response, Retrofit retrofit) { IP body = response.body(); String result = body.getData().getRegion(); Log.e("TAG",result);// 3.可以直接更改UI,因为onResponse方法已经在UI线程中 tv.setText(result);// 4.取消请求 call.cancel(); } @Override //请求失败 public void onFailure(Throwable throwable) { Log.e("TAG",throwable.toString()); tv.setText(throwable.toString()); throwable.printStackTrace(); } });这里面就很好理解了,调用enqueue方法开启异步网络请求,里面要的参数是Callback<T>类型,那我们就实例化一个Callback<T> ,然后从写里面的两个方法,这里可以看出来可以直接修改UI说明是在主线程中执行的方法。
这就是Retrofit2的基本用法。
1 0
- Retrofit2的基本用法
- Retrofit2.0的基本使用
- Retrofit2 的基本使用 (一)
- Retrofit2的简单用法(一)
- retrofit2框架基本使用
- Retrofit2.0基础用法
- Retrofit2.1用法(一)
- Retrofit2.0用法详解
- Retrofit2用法详解
- Retrofit2.0基础用法
- retrofit2+rxjava1的相关用法(总结篇)
- Retrofit2.0基本应用初探
- Retrofit2与RxJava用法大全
- [Android]RxJava的简单介绍和基本使用(二):retrofit2的简单介绍
- Retrofit2.0的使用
- Retrofit2.0 的使用
- Retrofit2的学习笔记
- Retrofit2.0的使用
- 碎碎念5
- python 中的三引号 ''' '''
- android如何改变listview中item选中时文字的颜色
- 用MATLAB生成MIF文件
- Maven 3 简易教程
- Retrofit2的基本用法
- 剑指offer面试题20:顺时针打印矩阵(自己的算法,不是书上的)
- LeetCode 371. Sum of Two Integers不用加减实现加法
- leetcode319. Bulb Switcher
- html实现控件的拖动,代码+ 详细注释
- 【转】Java中只有按值传递,没有按引用传递!
- 容器的功能扩展(三)finishRefresh
- 22. Generate Parentheses
- Verilog基础知识5(ASIC设计中各个阶段的关键问题汇总)