Retrofit2使用手册-基础一
来源:互联网 发布:悉尼类似淘宝的app 编辑:程序博客网 时间:2024/05/21 06:50
最近一直在看一些框架,开始慢慢了解到Retrofit,查了好多资料,也看了官网的资料。最后发现,框架并不是很复杂,主要是资料太零散,而且大部分都是写给高手看的,光点题,无实例。我还是决定自己写一下,一个菜鸟的心得体会。
这篇我先写一个最最最简单的(这里面会有接口,会有泛型,会有Gson Format生成的类)
先把依赖放出来
compile 'com.squareup.retrofit2:retrofit:2.2.0' compile 'com.squareup.retrofit2:converter-gson:2.2.0'
首先我来说一下,这个项目需要做些什么
我有一个网址:http://cloud.bmob.cn/d9f6840be6bb07cf/wash_test?clive=wash
请求成功之后会返回一组json数据
{ "washInfo": [ { "WashHead": "http://file.bmob.cn/M02/9A/D2/oYYBAFbD7M2Aa_YKAABfpRaTgOg207.png", "WashName": "帽子", "Amount": "¥5" }, { "WashHead": "http://file.bmob.cn/M02/9A/D3/oYYBAFbD7PyAXTQkAABh2U-waq4780.png", "WashName": "衬衣", "Amount": "¥10" }, { "WashHead": "http://file.bmob.cn/M02/9A/D3/oYYBAFbD7QqAfBcfAABwrLcpojo647.png", "WashName": "皮衣", "Amount": "¥100" }, { "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7V-AIO99AABI0yQ_tLg889.png", "WashName": "羽绒服", "Amount": "¥80" }, { "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7XKAQtouAACCvCGGiCo190.png", "WashName": "唐装", "Amount": "¥50" }, { "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7XiARjlUAABkLEO8ZTU657.png", "WashName": "西服", "Amount": "¥150" }, { "WashHead": "http://file.bmob.cn/M01/9A/D4/oYYBAFbD7X6ABVjDAABtcSiw-HI923.png", "WashName": "长袖风衣", "Amount": "¥218" } ]}
要求:
1、肯定是要请求数据
2、解析json数据
3、主线程打印接受到的数据
这篇我就先完成这最基本的一套流程,接下来就看代码,注意注释哦
先看Gson Format生成的类
package com.ty.retrofit_demo2;import java.util.List;/** * Created by IT on 2017/3/31. */public class WashGson { private List<WashInfoBean> washInfo; public List<WashInfoBean> getWashInfo() { return washInfo; } public void setWashInfo(List<WashInfoBean> washInfo) { this.washInfo = washInfo; } public static class WashInfoBean { /** * WashHead : http://file.bmob.cn/M02/9A/D2/oYYBAFbD7M2Aa_YKAABfpRaTgOg207.png * WashName : 帽子 * Amount : ¥5 */ private String WashHead; private String WashName; private String Amount; public String getWashHead() { return WashHead; } public void setWashHead(String WashHead) { this.WashHead = WashHead; } public String getWashName() { return WashName; } public void setWashName(String WashName) { this.WashName = WashName; } public String getAmount() { return Amount; } public void setAmount(String Amount) { this.Amount = Amount; } }}再看主函数
package com.ty.retrofit_demo2;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.Toast;import java.util.List;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;import retrofit2.http.GET;/** * 请求的地址:http://cloud.bmob.cn/d9f6840be6bb07cf/wash_test?clive=wash */public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //第一步 //开始配置Retrofit Retrofit retrofit = new Retrofit.Builder() //请求地址:http://cloud.bmob.cn/ /** * 注意这里需要的是一个地址,也就是服务器的根路径,具体的请求内容并不是在这里设置; * 根路径只能有一个,但是根路径下会有很多的子路径也就是PATH * 还要注意,参数是必须以'/'结尾,不然会抛出异常 */ .baseUrl("http://cloud.bmob.cn/") //我请求的数据,是json格式的,我用Gson Format根据返回的数据,生成了一个类,叫做WashGson /** * 如果你不需要自动解析,就想要返回一个ResponseBody(Retrofit其实是封装后的OKHTTP),可以不写这一句 * 如果你要使用的话,记得要加上依赖:compile 'com.squareup.retrofit2:converter-gson:2.2.0' */ .addConverterFactory(GsonConverterFactory.create()) //生成 .build(); //第二步 //开始配置接口 /** * 这个又是个看起来怪异的东西,我换一个大家常用的,大家看了就懂了 */ //List<String> list = new ArrayList<String>(); /** * 首先接口不能自己实例化,必须要通过子类去实例化, * WashService是接口,通过retrofit.create(WashService.class)去生成子类 * 是不是很清晰!!!! */ WashService service = retrofit.create(WashService.class); //第三步 //获得请求的一个发起器,也可以说是客户端,通过他可以发起一个完整的请求 //实例化接口以后,我们就能调用接口的函数了 Call<WashGson> washGsonCall = service.GetData(); //发起请求,网络请求是不能在UI线程调用的,但是Retrofit会自动的去子线程开启网络请求,并在UI线程回调方法 //这样我们就会很方便,对不对 washGsonCall.enqueue(new Callback<WashGson>() { //这个会在UI线程调用 @Override public void onResponse(Call<WashGson> call, Response<WashGson> response) { //看到这里是不是就明白了,接口设置的时候你需要返回什么类型,只要Retrofit支持,他就会自动给你转换好
List<WashGson.WashInfoBean> washInfoList = response.body().getWashInfo();
//此处有断点 Toast.makeText(MainActivity.this, "Data GET!!", Toast.LENGTH_SHORT).show(); } //这个不确定他在哪个线程,因为我还无法测试,就算请求失败也是不会调用它的。 //我看了下源码注释,说他是未知异常错误,网络异常才会调用,以后用到了,我再来补充 @Override public void onFailure(Call<WashGson> call, Throwable t) { } }); } interface WashService { //用注释表示请求的方法,方法有很多,这篇我先写一种Get,其他的分到下一篇再写 /** * 1、首先看一下GET括号内的内容,这个就是根路径下的子路径 * 里面是可以是用通配符去解析的,之后的博客里我也会专门写一个 * 2、注意看这个:Call<WashGson> * 这是Call是一个泛型类,而他的类型由我们来指定,并且这个类型就是我们之后所需要接受到的数据 * 如果你只想要一个ResponseBody,这里就写成Call<ResponseBody> * 3、@GET是框架定义的,名字代表这方法,但是其他的包括接口的名字,函数的名字,请随意 * 4、最后一点要注意,Call<WashGson>这个是返回值!!!!!! */ @GET("d9f6840be6bb07cf/wash_test?clive=wash") Call<WashGson> GetData(); }}来看一下结果,我打了个断点,用debug看了下请求结果
可以看到已经得到结果了,好了这篇就到这里,欢迎拍砖
0 0
- Retrofit2使用手册-基础一
- 深度详解Retrofit2使用(一)基础入门
- Retrofit2.0基础用法
- Retrofit2.0基础用法
- Rational Robot 基础使用手册(一)——概述
- Rational Robot 基础使用手册(一)——概述
- Retrofit2总结一
- Retrofit2.1用法(一)
- Retrofit2 完全解析(一)
- Retrofit2.0 从基础到实战(一)Retrofit的使用方法
- RFT基础使用手册
- Retrofit2 简明教程(一)
- Retrofit2 学习笔记(一)
- Retrofit2 简明教程(一)
- Retrofit2源码解析(一)
- Retrofit2源码解析(一)
- android retrofit2 文件上传(一)
- GraphD使用手册(一)
- java调用python脚本文件大盘点
- React Native 之读取JSON 文件
- React安装
- 每天一个Linux命令(19):find命令
- faster-rcnn
- Retrofit2使用手册-基础一
- 基于Nginx实现一个自己的HTTP模块
- STL与BOOST学习基础之模板函数和模板类.
- 软件收藏
- 堆排序
- Spring学习笔记(三)—基于XML Schema的配置方式
- js中两种定时器,setTimeout和setInterval的区别
- zipline的bundle相关数据结构
- ajax 设置Access-Control-Allow-Origin实现跨域访问