Android Retrofit2+Rxjava2 获取必应壁纸

 

复制代码
请求网络接口
public abstract class BaseApi {

/**
* 初始化Retrofit
* @param baseUrl 必须以 ‘/’ 结尾
*/
public Retrofit initRetrofit(String baseUrl) {
Retrofit.Builder builder = new Retrofit.Builder();
//支持返回Call<String>
builder.addConverterFactory(ScalarsConverterFactory.create());
//支持直接格式化json返回Bean对象
builder.addConverterFactory(GsonConverterFactory.create());
// 把Retrofit请求转化成RxJava的Observable
builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());
builder.baseUrl(baseUrl);
OkHttpClient client = setClient();
if (client != null) {
builder.client(client);
}
return builder.build();
}

/**
* 设置OkHttpClient,添加拦截器等
*
* @return 可以返回为null
*/
protected abstract OkHttpClient setClient();
}
public class Api extends BaseApi {

/**
* 静态内部类单例
*/
private static class ApiHolder {
private static Api api = new Api();
private final static ApiService ImageApiService = api.initRetrofit(ApiService.BINGYING_URL)
.create(ApiService.class);
}

public static ApiService getImageInstance(){return ApiHolder.ImageApiService;}

/**
* 做自己需要的操作
*/
@Override
protected OkHttpClient setClient() {
return null;
}
}


public interface ApiService {

String BINGYING_URL="https://cn.bing.com/";
//https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=12&mkt=zh-CN

/**
* 必应壁纸接口
* @param format 格式
* @param idx 请求图片截止天数
* @param n 数量
* @param mkt 地区
* @return ImageBean
*/
@GET("HPImageArchive.aspx")
Observable<ImageBean> image(@Query("format")String format,@Query("idx") String idx,
@Query("n") String n,@Query("mkt") String mkt);

}
最后可以在Activity或者Fragment 页面初始化时调用
public void initView() {

Disposable disposable = Api.getImageInstance().image("js","0","12","zh-CN")
.subscribeOn(Schedulers.io()) // 订阅触发后,在子线程中进行请求
.observeOn(AndroidSchedulers.mainThread()) // 在UI线程中暗中观察并及时消费
.subscribe(new Consumer<ImageBean>() { // 对返回数据做了一些处理
@Override
public void accept(ImageBean imageBean) throws Exception {
//可以用RecycleView 来装载数据初始化页面,设置Adapter


}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {

/*
* 发生了错误,通知UI层
*/
}
});

}


复制代码

 

posted @   炸憨啪  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示