1.导入依赖
//RxJava
implementation 'io.reactivex:rxjava:1.1.3'
//RxAndroid
implementation 'io.reactivex:rxandroid:1.1.0'
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.0.0'
//retrofit依赖Gson
implementation 'com.squareup.retrofit2:converter-gson:2.0.0'
//OkHttp
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
//retrofit依赖RxJava
implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
2.那我们的地址测试
随机头像输出 - 优启梦免费API数据接口调用服务平台 (uomg.com)https://api.uomg.com/doc-rand.avatar.html
3.根据我们的内容创建一个相对应的类
public class Data {
private int code;
private String imgurl;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getImgurl() {
return imgurl;
}
public void setImgurl(String imgurl) {
this.imgurl = imgurl;
}
}
4.编写我们的接口类
public interface DataService {
//get请求 , 不再调用原来的Call,而是采用 Observable
@GET("api/rand.avatar")
Observable<Data> getJsonData(@Query("sort") String sort, @Query("format") String json);
// //get请求
// @GET("api/rand.avatar")
// Call<Data> getJsonData(@Query("sort") String sort,@Query("format") String json);
}
5.编写工具类
public class RetrofitServiceManager {
private final OkHttpClient okHttpClient;
private final Retrofit retrofit;
private RetrofitServiceManager() {
//创建一个okHttpClient实例
okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//连接超时时间
.writeTimeout(30, TimeUnit.SECONDS)//设置写入操作超时时间
.readTimeout(30, TimeUnit.SECONDS)//设置读操作超时时间
.build();
//创建一个retrofit实例
retrofit = new Retrofit.Builder()
.client(okHttpClient)//设置使用okhttp网络请求
.baseUrl("https://api.uomg.com/")//设置服务器路径
.addConverterFactory(GsonConverterFactory.create())//添加转化库,默认是Gson
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加回调库,采用RxJava
.build();
}
private static class SingletonHolder {
private static final RetrofitServiceManager INSTANCE = new RetrofitServiceManager();
}
/*
* 获取RetrofitServiceManager
**/
public static RetrofitServiceManager getInstance() {
return SingletonHolder.INSTANCE;
}
public <T> T create(Class<T> service) {
return retrofit.create(service);
}
}
6.将我们的处理过程封装起来
public class HttpEngine {
private static DataService dataService = RetrofitServiceManager.getInstance().create(DataService.class);
/*
* 获取随机网络头像
* **/
public static void getDatatouxiang(String sort, String json, Observer<Data> observer) {
setSubscribe(dataService.getJsonData(sort, json), observer);
}
private static <T> void setSubscribe(Observable<T> observable, Observer<T> observer) {
observable.subscribeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread())//子线程访问网络
.observeOn(AndroidSchedulers.mainThread())//回调到主线程
.subscribe(observer);
}
}
7.编写我们的main_activity类
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();//调用方法启动
}
private void initData() {
//调用封装好的retrofit请求方法
HttpEngine.getDatatouxiang("动漫女", "json", new Observer<Data>() {
@Override
public void onCompleted() {
Log.i("getAttributionTag()"," //完成");
}
@Override
public void onError(Throwable e) {
//失败
Log.i("retrofit==111=", "请求错误:"+e.getMessage());
}
@Override
public void onNext(Data data) {
//成功
Log.i("retrofit==222=", data.getCode()+"---"+data.getImgurl());
}
});
}
}