基于Retrofit2
先把base编写
public interface BaseContract {
interface BasePresenter<T> {
void attachView(T view);
void detachView();
}
interface BaseView {
void showError();
void complete();
}
}
public class RxPresenter<T extends BaseContract.BaseView> implements BaseContract.BasePresenter<T> {
protected T mView;
protected CompositeDisposable mDisposable;
protected void unSubscribe() {
if (mDisposable != null) {
mDisposable.dispose();
}
}
protected void addDisposable(Disposable subscription) {
if (mDisposable == null) {
mDisposable = new CompositeDisposable();
}
mDisposable.add(subscription);
}
@Override
public void attachView(T view) {
this.mView = view;
}
@Override
public void detachView() {
this.mView = null;
unSubscribe();
}
}
1.basebean:外部返回与实体类无关的数据,比如boolean ok,是表示返回数据正常,根据接口不同,返回的字段不同,与实体类中的数据无关
public class BaseBean {
public boolean ok;
}
2.bean:实体类对象
public class bean{
private int id ;
public String getid() {
return id;
}
public void set_id(String id) {
this.id = id;
}
}
3.beanpackage
public class beanpackage extends BaseBean {
private bean mbean;
public bean getBean() {
return mbean;
}
public void setBean (bean bean) {
this.mbean= bean;
}
}
4.beanContract
public interface beanContract extends BaseContract{
interface View extends BaseContract.BaseView{
void finishRefresh(bean bean);
}
interface Presenter extends BaseContract.BasePresenter<View>{
void refreshdata(String bean_id);
}
}
5.beanPresenter
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
public class beanPresenter extends RxPresenter<beanContract.View>
implements beanContract.Presenter {
@Override
public void refreshdata(String bean_id) {
//如果需要添加非对称加密
/*StringBuffer buffer = new StringBuffer();
buffer.append("bean_id=")
.append(bean_id)
Log.i("加密前", buffer.toString());
String keys = Aes.encode(buffer.toString(), Aes.keyBytes);*/
Disposable refreshDispo = RemoteRepository.getInstance()
.getBookListDetail(bean_id) //keys
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
(beans)-> {
mView.finishRefresh(beans);
mView.complete();
}
,
(e) ->{
mView.showError();
LogUtils.e(e);
}
);
addDisposable(refreshDispo);
}
}
本文详细介绍了如何在Android开发中使用Retrofit2和RxJava结合MVP模式进行网络请求处理。通过定义BaseContract, Bean类和Presenter,实现了数据加载、错误处理和视图更新的解耦。
&spm=1001.2101.3001.5002&articleId=88581523&d=1&t=3&u=b84884b3cf2f4829acab8df5d6c7bb79)
1593

被折叠的 条评论
为什么被折叠?



