前言
本人第一篇正经文章(不正经的文章没有发表出去),
本文中的Retrofit均指代Retrofit2.0。
任务:简单使用Retrofit2
Retrofit 是什么?
Retrofit 是一个用于 Android 和 Java 平台的类型安全的网络请求框架。Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,你看人家的产品(想想就开心)。
Retrofit在github上的地址:https://github.com/square/retrofit
先来点开胃小菜,提提神。上代码,
public interface GitHubService {
@GET("users/{user}/repos")
Call> listRepos(@Path("user") String user);
}
上面的代码就是Retrofit官网上面的源代码,如果照着源代码写就会出现Repo是干嘛的,一脸蒙蔽了。为了保持清醒上两张图。
点击retrofit-adapters进入的页面是长得如下:
点击retrofit-converters进入的页面是长得如下:
上面出问题的Repo就是和converters有关系了。那么我们来科普一下。
retrofit-adapters表示retrofit支持的适配器,举个例子想要支持RxJava就需要在代码中添加:addCallAdapterFactory(RxJavaCallAdapterFactory.create())。此处只是预热一下。后面我们会说到。
retrofit-converters从字面意思就看的出来转换器。没错就是它,
这个强大的库可以很简单的把返回的 JSON 或者 XML 数据解析成简单 Java 对象。GET, POST, PUT, PATCH, 和 DELETE 这些请求都可以执行。
对比上面的图片可以看到,JSON转换器是:Gson,Jackson,Moshi
对于 Protocol Buffers, 转换器是:Protobuf,Wire
对于 XML 解析, 转换器是:simplexml
对于 text/plain 解析,转行器是:scalars
那么上面的Repo就是java对象自己定义的对象。
1.创建一个 Android Studio 工程
打开 Android Studio,创建一个新工程(直接创建一个新的Module也是一样),然后创建一个命名为 MainActivity 的空白 Activity。
2.添加依赖库
创建好新的工程后,在我们的build.gradle(不是整个工程下的)中添加以下依赖。
//Retrofit
compile 'com.squareup.retrofit2:retrofit:2.2.0'
//Retrofit对应json的转换库
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
3.添加网络权限
我们做的是网络请求,当然要有访问网络的权限。在我们应用的清单文件 AndroidManifest.xml 里面声明网络权限。
4.创建 API 接口
我们使用https://api.github.com/repos/square/retrofit/contributors 这个地址。新建一个APIGitHub类。我们使用的是ResponseBody,这是okhttp3里面的类,因为Retrofit2里面自动设置了okhttp的依赖,所以我们可以直接用。
public interface APIGitHub {
@GET("repos/square/retrofit/contributors")
Call getData();
}
GET 注解明确的定义了当该方法调用的时候会执行一个 GET 请求。接口里每一个方法都必须有一个 HTTP 注解,用于提供请求方法和相对的 URL。Retrofit 内置了 5 种注解:@GET, @POST, @PUT, @DELETE, 和 @HEAD。后面我们会讲到。
5.在我们的MainActivity中请求网络
直接上代码。
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
APIGitHub apiGitHub = retrofit.create(APIGitHub.class);
apiGitHub.getData().enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
String sting = null;
try {
sting = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
Log.e(TAG, "获得信息" + sting);
} else {
Log.e(TAG, "获得信息错误");
}
}
@Override
public void onFailure(Call call, Throwable t) {
Log.e(TAG, "获得信息直接获得错误+" + t.toString());
}
});
}
现在我们就得到具体的信息了。
以上就是简单的使用。然后发现现在的网络特别不好使,嗨这不是打消我的积极性么????。下一篇我们分析Retrofit详细的使用和转换器的使用。。请期待哦!!