Retrofit 一推出就受到了广大人民的热爱,作为一个学习的人,也要跟上时代,学习新的技术,了解更多的知识,带着这样的目标,开始了我的学习之路,第一步肯定就是百度,看看别人的博客,从中挑取适合自己的进行学习,以下是我看到的一个不错的博客,推荐给大家,当然,也可以自己百度学习:
这是一份很详细的 Retrofit 2.0 使用教程(含实例讲解)Retrofit详细讲解,个人认为很不错。
Android:手把手带你入门神秘的 Rxjava RXjava详细讲解
在了解了这两个库的使用之后,开始了我们的第一个简单的获取网页JSON数据。在这里推荐一个获取数据API的一个网站,本人也只是用于获取网站的JSON数据测试,当然有实力的话也可以自己写一个JSON数据的文件。这里推荐的网址是https://gank.io/api,里面给我们详细的介绍了一些API的接口以及使用,我就不阐述了,前期工作准备好之后就开始获取数据的工作。
第一:新建一个Android 项目,名字自取,新建完成之后,添加好需要使用的库,
//retrofit implementation 'com.squareup.retrofit2:retrofit:2.1.0' implementation 'com.squareup.retrofit2:converter-gson:2.1.0' implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0' //rxJava implementation 'io.reactivex:rxandroid:1.2.1' implementation 'com.ogaclejapan:rxbinding:1.2.0' implementation 'com.github.VictorAlbertos.RxCache:core:1.4.6' implementation 'androidx.recyclerview:recyclerview:1.1.0' // Glide implementation 'com.github.bumptech.glide:glide:4.10.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.10.0'
第二:添加需要的权限
<uses-permission android:name="android.permission.INTERNET" />
第三:使用 Retrofit + RXjava实现JSon数据的获取(以https://gank.io/api/v2/data/category/GanHuo/type/Android/page/1/count/45的网页JSON数据为例)
(1)定义网络请求返回的实体类,在对于那些不熟悉JSOn数据结构的人,提供你们一个简单的方法,快速获取一个实体类,点击File ----> Settings ---->Plugins ,搜索GsonFormat插件,下载完成安装,安装完成之后需要重启Android Studio ,重启之后就可以使用了。
快速生成实体类的方法:
1.新建一个实体类PhotoBean ;
2.点击右键在弹框中选择 Generate属性------->GsonFormat就可以一键生成JSon实体类。
(2)定义需要访问的网页的BASE_URL:
public static final String BASE_URL = "https://gank.io/";
(3)定义一个拼接一个BASE_URL然后进行网络请求的接口类:
public interface RetrofitData {
@GET("api/v2/data/category/Girl/type/Girl/page/{page}/count/{number}")
Observable<PhotoBean> getData(@Path("page") int page,@Path("number") int number);
}
(4)定义一个Retrofit 辅助类,创建Retrofit实例
public class RetrofitHelper {
public static OkHttpClient okHttpClient;
public static Retrofit retrofit;
public static OkHttpClient getOkHttpClientInstance(){
if (okHttpClient == null){
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build();
}
return okHttpClient;
}
public static Retrofit getRetrofitInstance(){
if (retrofit == null){
if (okHttpClient == null){
getOkHttpClientInstance();
}
retrofit = new Retrofit.Builder()
.baseUrl(Contants.BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
}
return retrofit;
}
(5)Retrofit +RXjava结合使用;
private void RequestPhotoData() {
final Retrofit retrofit = RetrofitHelper.getRetrofitInstance();
RetrofitData retrofitData = retrofit.create(RetrofitData.class);
Observable<PhotoBean> observable = retrofitData.getData(1,45);
observable.subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<PhotoBean>() {
@Override
public void onCompleted() {
Log.i("wj","--------onCompleted-----------");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(PhotoBean photoBean) {
Log.i("wj","--------onNext-----------"+photoBean);
list = photoBean.getData();
refashUI();
}
});
}
(6)将获取到的数据用列表的方式显现出来:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context); recyclerView.setLayoutManager(linearLayoutManager); myAdapter = new MyAdapter(context,list); recyclerView.setAdapter(myAdapter);
至此,Retrofit + RxJava 结合获取JSON数据完毕。github地址:https://github.com/sure13/RetrofitTest