节前(国庆七天乐),编程用了一下Retrofit写网络请求,然后做个总结,免得忘了。
先简单聊下Retrofit,Retrofit和OkHttp一样都是最小的世界500强公司——Squareup公司(一家国外的移动支付公司)的作品。这个开源框架的工程名字叫做Square Open Source。顺便说一下这个的作者:大名鼎鼎的JackWarton!!!
废话少说,直入主题。
一、准备工作:
1.网络权限
<uses-permission android:name="android.permission.INTERNET" />
2.框架包的引用
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
二、预备知识:
Retrofit是一种使用注解来发起网络请求的。(有点类似与初始化各种View、监听View的动作的黄油刀ButterKnife)
根据常用的请求类型,分为这样几种注解:
@GET get请求
@POST post请求
@PUT put请求
@PATCH patch请求(用来更新局部资源)
@HEAD 请求头
@OPTIONS 请求选项
@DELETE 删除请求
@Query 查询
@HTTP 包括method、path、hasBody
优点:使用注解可以大大简化请求的步骤和代码。
缺点:没有取消真在进行中的请求的方法。如果需要取消必须手动杀死,并且不好实现。
请求方法:必须指定请求方式和相对应的URL
三、使用的简单例子:
以一个简单的GET请求为例
// 首先将URL处理一下,将URL分为域名基本部分和相对部分。
// BASE_URL是基本部分
String BASE_URL = "http://www.example.com";
// 相对部分写在注解中
@GET("/part/index.php/...") ;
1.第一步:Retrofit初始化
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
其中,addConverterFactory方法的调用目的是关联Gson,以便于将获得得JSON字符串将转化成Java对象。
2.第二步,需要创建一个规定格式的接口
interface HTTPService {
String BASE_URL = "http://www.example.com";
@GET("/part/index.php/...")
// 其中这个接口中编写一个get方法可以将获得得JSON字符串转换成Gson对象
Call<JavaBean> getJavaBean();
}
3.第三步,初始化HTTPService、并且调用回调方法。
HTTPService service = retrofit.create(HTTPService.class);
Call<JavaBean> mCall = service.getJavaBean();
mCall.enqueue(new Callback<JavaBean>(){
@Override
public void onResponse(Call<JavaBean> call, Response<JavaBean> response) {
response.body();
// TODO
}
@Override
public void onFailure(Call<JavaBean> call, throwable t) {
// TODO
}
});
值得注意的是,此使用的是异步GET请求,请求发起是在一个内置的工作线程中,回调返回请求结果是在主线程中。总而言之就是你不用管线程的事。线程都封装好了。
——————————————不怎么华丽的分割线———————————————–