这个首先要进行分包:M层 V层 P层 这个跟之前写的有点不一样,那么下面来看一下
M层:
首先要进行写一个接口
public interface BaseModel {
void getDataFromNet(String url, Map<String, String> map);
void unsubcribe();
}
下面就要继承这个好接口了
public class CategaryModel implements BaseModel{
private Ipresenter prensenterInter;
public Disposable d;
public CategaryModel(Ipresenter prensenterInter) {
this.prensenterInter = prensenterInter;
}
@Override
public void getDataFromNet(String url, Map<String, String> map) {
//观察者与被观察者其实也是互相持有引用,,,也存在内存泄漏的问题
RetrofitUtil.getService().doGet(url,map)
// 如果这一行报错那就要看一下是不是导错包了
.subscribeOn(Schedulers.io())//在io线程获取数据
.observeOn(AndroidSchedulers.mainThread())//在android主线程梳理数据
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
CategaryModel.this.d = d;
}
@Override
public void onNext(ResponseBody responseBody) {
//代表获取到数据
prensenterInter.onSuccess(responseBody);
}
@Override
public void onError(Throwable e) {
//发生错误
prensenterInter.onError(e);
}
@Override
public void onComplete() {
//完成 事件队列已经到最后
}
});
}
@Override
public void unsubcribe() {
d.dispose();//解除订阅
}
}
接下来就要写P层
这里写的是为了解决内存泄漏写的一个类
public abstract class BasePresenter<T> {
protected Reference<T> mViewRef;//View接口类型弱引用
public void attachView(T view) {
mViewRef = new WeakReference<T>(view); //建立关联
}
protected T getView() {
return mViewRef.get();//获取View
}
public boolean isViewAttached() {//判断是否与View建立了关联
return mViewRef != null && mViewRef.get() != null;
}
public void detachView() {//解除关联
if (mViewRef != null) {
mViewRef.clear();
mViewRef = null;
}
}
}
接下来这是一个接口
public interface Ipresenter {
void getDataFromNet(String url, Map<String, String> map);
void unsubcribe();
void onSuccess(ResponseBody responseBody);
void onError(Throwable throwable);
}
public class CategryPresenter extends BasePresenter implements Ipresenter {
private Imain imain;
private CategaryModel categaryModel;
public CategryPresenter(Imain imain) {
this.imain = imain;
categaryModel = new CategaryModel(this);
}
@Override
public void getDataFromNet(String url, Map<String, String> map) {
categaryModel.getDataFromNet(url,map);
}
@Override
public void onSuccess(ResponseBody responseBody) {
imain.onSuccess(responseBody);
}
@Override
public void onError(Throwable throwable) {
imain.onError(throwable);
}
@Override
public void unsubcribe() {
//接触订阅
categaryModel.unsubcribe();
}
}
这个是V层
public class MainActivity extends AppCompatActivity implements Imain {
private CategryPresenter categryPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
categryPresenter = new CategryPresenter(this);
//产生关联
categryPresenter.attachView(this);
getData();
}
private void getData() {
Map<String,String> map = new HashMap<>();
//获取数据
categryPresenter.getDataFromNet(Constant.CATEGARY_URL,map);
}
@Override
public void onSuccess(ResponseBody responseBody) {
try {
Log.e("----",responseBody.string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable throwable) {
Log.e("----",throwable.getMessage());
}
@Override
protected void onDestroy() {
super.onDestroy();
categryPresenter.unsubcribe();//解除订阅
if (categryPresenter.isViewAttached()) {//如果产生关联
//解除关联
categryPresenter.detachView();
}
}
}
接口
public interface Imain {
void onSuccess(ResponseBody responseBody);
void onError(Throwable throwable);
}