声明本文中的Retrofit均指代Retrofit2.0
首先要导入一些关于retrofit的依赖包,还有它自带的gson包
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
//rxjava的依赖
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
创建Retrofit实例
Retrofit build = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
使用addCallAdapterFactory向Retrofit注册CustomCallAdapterFactory
addCallAdapterFactory与addConverterFactory同理,也有先后顺序
接口定义
@GET(API.CLASS)
public Flowable<Catagory> getNews();
接口调用
Flowable<Catagory> obserable = RetrofitHelper.getServiceAPI().getNews();//被观察者
obserable.subscribeOn(Schedulers.io())//被观察者 Scheduler (调度器)
.observeOn(AndroidSchedulers.mainThread()) //观察者 切换到主线程
.subscribe(new Consumer<Catagory>() {
@Override
public void accept(Catagory catagory) throws Exception {
//调用成功的方法
cgsb.chengGong(catagory);
}
});
让我们来看一下具体的类使用
接口的定义
public interface ServiceAPI {
@GET(API.CLASS)
public Flowable<Catagory> getNews();
@GET(API.PRODUCT_CATAGORY)
public Flowable<ProductCatagoryBean> getNewss(@Query("cid") String i);
}
RetrofitHelper工具类
public class RetrofitHelper {
private static OkHttpClient client;
private static ServiceAPI serviceAPI;
static {
getClient();
}
public static OkHttpClient getClient(){
if(client==null){
synchronized (OkHttpClient.class){
if(client==null){
client=new OkHttpClient();
}
}
}
return client;
}
public static ServiceAPI getServiceAPI(){
if(serviceAPI==null){
synchronized (ServiceAPI.class){
if(serviceAPI==null){
serviceAPI=onCreate(ServiceAPI.class,API.HOST);
}
}
}
return serviceAPI;
}
public static <T> T onCreate(Class<T> tclass, String url){
Retrofit build = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(client)
.build();
return build.create(tclass);
}
}
定义的接口回调
public interface CGSB<T> {
void chengGong(T t);
void shiBai(Call<T> call);
}
接口的实现
public interface NewsModelJK {
void getNews(CGSB<Catagory> cgsb);
void getProductCatagory(String cid, CGSB<ProductCatagoryBean> cgsb);
}
public class NewsModel implements NewsModelJK {
@Override
public void getNews(final CGSB<Catagory> cgsb) {
Flowable<Catagory> obserable = RetrofitHelper.getServiceAPI().getNews();//被观察者
obserable.subscribeOn(Schedulers.io())//被观察者 Scheduler (调度器)
.observeOn(AndroidSchedulers.mainThread()) //观察者 切换到主线程
.subscribe(new Consumer<Catagory>() {
@Override
public void accept(Catagory catagory) throws Exception {
//调用成功的方法
cgsb.chengGong(catagory);
}
});
}
}
数据的传递
public class NewsPersenter {
private final NewsModel newsModel;
private INews iNews;
public NewsPersenter(INews iNews) {
newsModel = new NewsModel();
this.iNews=iNews;
}
public void getNews(){
newsModel.getNews(new CGSB<Catagory>() {
@Override
public void chengGong(final Catagory catagory) {
List<Catagory.DataBean> data = catagory.getData();
iNews.showBean(data);
}
@Override
public void shiBai(Call<Catagory> call) {
}
});
}
}
public interface INews {
void showBean(List<Catagory.DataBean> data);
}
public class MainActivity extends AppCompatActivity implements INews {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLvLeft = (ListView) findViewById(R.id.lv_left);
mElv = (MyExpanableListView) findViewById(R.id.elv);
newsPersenter = new NewsPersenter(this);
newsPersenter.getNews();
}
@Override
public void showBean(List<Catagory.DataBean> data) {
adapter = new LeftAdapter(this, data);
mLvLeft.setAdapter(adapter);
}
}
其中有一点MVP的思想,写到这就差不多了