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 方法的简单实例