retrofit 是基于 OKhttp 的封装的一个HTTP库
JackWharton 大神又是开发者
使用:
gradle:
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
我们的目标是这个地址 :http://op.juhe.cn/onebox/news/words?key=168b0533eb75d9b0bd675f0ece908ff3
这个地址会返回 json 格式的 新闻列表 数据
首先 建立一个 retrofit对象。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://op.juhe.cn")
.addConverterFactory(GsonConverterFactory.create()) //使用内置gson解析功能
.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //使用rxjava
.build();
然后,我们定义一个我们需要使用的 api 接口
新建一个 interface 就叫 NewsService:
public interface NewsService {
@GET("/onebox/news//{type}")
Observable<NEWS> getNews(@Path("type") String type, @Query("key") String key);
}
其中在这个无结构体的getNews方法中,我们添加了一个注解 @GET(“...”) 这个注解会告诉retrofit 这是一个get请求
双引号内的字符串,代表的这个接口在网络中的详细地址。
{} 内的内容 代表了一个占位符
可以看到 第一个 参数 使用了注解@PATH(“”) 这个注解将会将 参数注入到 地址中
我们定义的这个getNews 方法 返回一个Observable 对象 能这样写 是因为 我们使用了
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
首先使用 retrofit.create()方法获取一个 实现该接口的实例
然后调用 我们写的方法, 传入 参数,然后就是 rxjava的使用方法了
NewsService newsService = retrofit.create(NewsService.class);
newsService.getNews("words",key)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Observer<NEWS>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(NEWS news) {
Log.e("获取到了 新闻列表", "news.size = " + news.getResult().size());
for (int i = 0; i < news.getResult().size(); i++) {
Log.e("新闻1:",""+news.getResult().get(i)+"/n");
}
}
});
这个一个GET 方法的简单实例