示例地址
//http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage
url地址
public class HttpConfig {
public static String base_url = "http://result.eolinker.com/";
public static String url = "umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611";
}
定义借口
public interface RetrofitService {
@GET("umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611")
Observable<Book> getSearchBook(@QueryMap Map<String, String> map);
}
Retrofit的工具类
public class RetrofitUtil {
//单利模式
private static RetrofitUtil retrofitUtil;
private final Retrofit retrofit;
public static RetrofitUtil getInstance() {
if (retrofitUtil == null) {
retrofitUtil = new RetrofitUtil();
}
return retrofitUtil;
}
//初始化Retrofit
public RetrofitUtil() {
retrofit = new Retrofit.Builder()
.baseUrl(HttpConfig.base_url)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
}
//指定服务
public <T> T createRequest(Class<T> clz) {
T t = retrofit.create(clz);
return t;
}
}
Modle层调用
public class ModleImpl implements IModle{
@Override
public void getShowData(Map<String, String> map, final ShowDataListener showDataListener) {
RetrofitUtil retrofitUtil = RetrofitUtil.getInstance();
RetrofitService service = retrofitUtil.createRequest(RetrofitService.class);
Observable<Book> observable = service.getSearchBook(map);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Book>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
showDataListener.getDataError(e.getMessage());
}
@Override
public void onNext(Book book) {
Book.DataBean data = book.getData();
showDataListener.getDataSuccess(data);
}
});
}
}
没有封装的ritrofit应用:
Rxjava就是java语言开发中用于异步操作,RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。
Gradle:
implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
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'
示例数据接口:
https://api.douban.com/v2/book/search?q=金瓶梅&tag=&start=0&count=1
1.定义接口,封装参数
public interface RetrofitService {
@GET("book/search")
Call<Book> getSearchBook(
@Query("q") String name,
@Query("tag") String tag,
@Query("start") int start,
@Query("count") int count
);
}
2.创建 Retrofit 实例
Retrofit retrofits = new Retrofit.Builder()
// 设置网络请求的Url地址
.baseUrl("https://api.douban.com/v2/")
// 设置数据解析器
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().create()))
.build();
3.创建 网络请求接口 的实例
```
RetrofitService service = retrofits.create(RetrofitService.class);
Call<Book> call = service.getSearchBook("金瓶梅",null,0,1);
call.enqueue(new Callback<Book>() {
@Override
public void onResponse(Call<Book> call, Response<Book> response) {
// 得到数据
Book.DataBean data = response.body().getData();
}
@Override
public void onFailure(Call<Book> call, Throwable t) {
}
});