MVP(积类)实现方法

Call请求数据写法

Modl层 M

package com.example.mvp5_lianxi.mvp;

import com.example.mvp5_lianxi.App.App_intierface;
import com.example.mvp5_lianxi.App.WeatherBean;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;


/**
 * Created by Administrator on 2018/1/1.
 */

public class Modl {
    //请求头
    private static final String BASE_URL = "http://www.weather.com.cn/";
    private Call<WeatherBean> weatherBeanCall;

    public void request(String cityId, Callback<WeatherBean> callback){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        App_intierface intierface = retrofit.create(App_intierface.class);
        weatherBeanCall = intierface.requestWeather(cityId);
        //将请求下来的数据放进enqueue
        weatherBeanCall.enqueue(callback);
    }

    //关闭网络请求
    public void getwangluo(){
        if(weatherBeanCall != null && !weatherBeanCall.isCanceled()){
            weatherBeanCall.cancel();
        }
    }

}

Presenter层 P

package com.example.mvp5_lianxi.mvp;

import android.os.Handler;
import android.util.Log;

import com.example.mvp5_lianxi.App.WeatherBean;
import com.ljq.mvpframework.presenter.BaseMvpPresenter;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

/**
 * Created by Administrator on 2018/1/1.
 *
 */

public class Presenter2 extends BaseMvpPresenter<Iview>{
    private final Modl modl;
    //这一步必须这么写,切记
    public Presenter2() {
        this.modl =  new Modl();
    }

    //调用presenter  如果有参数括号里填写参数,没参数的话什么都不用用写
    public void clickRequest(final String cityId){

        //显示耗时操作
        if(getMvpView() != null){
            getMvpView().log();
        }

        //模拟网络延迟,可以显示出加载中
        // Handler耗时操作,可加可不加
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //将modl层解析出来的数据在P层调用
                modl.request(cityId, new Callback<WeatherBean>() {
                    @Override
                    public void onResponse(Call<WeatherBean> call, Response<WeatherBean> response) {
                        //成功方法
                        if(getMvpView() != null){
                            getMvpView().chenggong(response.body());
                        }
                    }

                    @Override
                    public void onFailure(Call<WeatherBean> call, Throwable t) {
                        //失败方法
                        if(getMvpView() != null){
                            getMvpView().shibai(Log.getStackTraceString(t));
                        }
                    }
                });
            }
        },1000);
    }


    //解绑
    @Override
    public void onDestroyPersenter() {
        super.onDestroyPersenter();
    }
    //关闭网络
    public void interruptHttp(){
        modl.getwangluo();
    }
}

View层 V

package com.example.mvp5_lianxi.mvp;

import com.example.mvp5_lianxi.App.WeatherBean;
import com.ljq.mvpframework.view.BaseMvpView;

/**
 * Created by Administrator on 2018/1/1.
 */

public interface Iview extends BaseMvpView{
    //如果做耗时操作加一个log
    void  log();
    //成功
    void chenggong(WeatherBean bean);
    //失败
    void shibai(String shibai);


}
ManiActivity调用MVP方法

package com.example.mvp5_lianxi;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.example.mvp5_lianxi.App.WeatherBean;
import com.example.mvp5_lianxi.mvp.Iview;
import com.example.mvp5_lianxi.mvp.Presenter2;
import com.ljq.mvpframework.factory.CreatePresenter;
import com.ljq.mvpframework.view.AbstractMvpAppCompatActivity;
/**
 * 1.在AbstractMvpActivity中,绑定View,解绑View这些方法,如果现在再创建一个AbstractMvpFragment或者
 * AbstractMvpView、或者是一个AbstractMvpXXX等,那么这些代码全部都要再写一遍,代码冗余,可以抽出去
 * <p>
 * 2.实现AbstractMvpActivity的实现类中创建Presenter的方法,每个实现类都要写new,这一步父类完全可以帮忙解决
 *
 * <p>
 * 3.如果Activity或者Fragment或者View等V层意外销毁,那么我们的Presenter也没有必要存在了,界面都没有了还
 * 要这个有什么用,但是如果又被重启
 * 那么我们还需要再恢复Presenter,也就是说让我们的Presenter和View的生命周期同步,这样才算完美
 * <p>
 * 4.创建Presenter的动作放到使用时再创建,可以稍微优化一下性能问题
 * <p>
 * 解决问题:
 * 1.使用代理模式将绑定和解绑view的操作抽离出来
 * 定义绑定解绑
 * <p>
 * 2.使用工厂模式和注解在上层统一创建Presenter
 * <p>
 * 3.序列化保存Presenter,销毁Presenter对象,如果View重建反序列化重新获取Presenter
 * <p>
 * 4.将Presenter的创建过程放入到获取Presenter的方法中,如果存在返回,不存在创建,保证Presenter不会为空
 * ,而且这样还可以保证在使用的时候再创建,节省内存资源
 */



//添加presenter层的注解必须写
@CreatePresenter(Presenter2.class)
//实现mvp调用AbstractMvpAppCompatActivity<自己的V层,自己的P层>,再继承自己的P层
public class MainActivity extends AbstractMvpAppCompatActivity<Iview,Presenter2> implements Iview{

    private Button bt;
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt = findViewById(R.id.bt);
        tv = findViewById(R.id.tv_text);
        //button点击事件
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //调用在P层写的调用方法
                getMvpPresenter().clickRequest("101010100");

            }
        });
    }


    @Override
    public void log() {
        tv.setText("请求中,请稍后...");
    }

    @Override
    public void chenggong(WeatherBean bean) {
        //成功
        tv.setText(bean.getWeatherinfo().toString());
    }

    @Override
    public void shibai(String shibai) {
        //失败
        tv.setText(shibai);
    }
}


Retrofit+rxjava使用方法

Modl层

package com.example.mvp_rxjava.mvp;

import com.example.mvp_rxjava.api.Api_interface;
import com.example.mvp_rxjava.api.Bean;
import com.example.mvp_rxjava.api.Fengzhuang;

import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Retrofit;

/**
 * Created by Administrator on 2018/1/3.
 */

public class Modl {

    //运用接口回调
    public  void getmodl(final Presenter.DataBack back){
        //封装过的retrofit
        Retrofit retrofit = Fengzhuang.getretrofit();


        Api_interface anInterface = retrofit.create(Api_interface.class);

        Flowable<Bean>  flowable = anInterface.getmyAPI_HOU();

        //RxJAVA
        flowable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Bean>() {
                    @Override
                    public void accept(Bean bean) throws Exception {

                        //回调数据
                        back.ok(bean);


                    }
                });
    }

}
Presenter层

package com.example.mvp_rxjava.mvp;

import com.example.mvp_rxjava.api.Bean;
import com.ljq.mvpframework.presenter.BaseMvpPresenter;

/**
 * Created by Administrator on 2018/1/3.
 */

public class Presenter extends BaseMvpPresenter<Iview>{

    private final Modl modl;
    //这一步必须这么写,切记
    public Presenter() {
        this.modl = new Modl();
    }

    //创建接口回调
    public interface  DataBack{
        //成功方法
        void ok(Bean bean);
        //失败方法
        void no();
    }

    public void getpresenter(){

        //调用接口回调
        modl.getmodl(new DataBack() {
            @Override
            public void ok(Bean bean) {
                if (getMvpView() != null){
                    //成功方法
                    getMvpView().chenggong(bean);
                }
            }

            @Override
            public void no() {

            }
        });
}
}
view层

package com.example.mvp_rxjava.mvp;

import com.example.mvp_rxjava.api.Bean;
import com.ljq.mvpframework.view.BaseMvpView;

/**
 * Created by Administrator on 2018/1/3.
 */

public interface Iview extends BaseMvpView{
    void chenggong(Bean bean);
   
}
Activity

package com.example.mvp_rxjava;

import android.os.Bundle;
import android.util.Log;

import com.example.mvp_rxjava.api.Bean;
import com.example.mvp_rxjava.mvp.Iview;
import com.example.mvp_rxjava.mvp.Presenter;
import com.ljq.mvpframework.factory.CreatePresenter;
import com.ljq.mvpframework.view.AbstractMvpAppCompatActivity;

import io.reactivex.Flowable;


//这行一定要写
@CreatePresenter(Presenter.class)
public class MainActivity extends AbstractMvpAppCompatActivity<Iview,Presenter> implements Iview {
    private Flowable<Bean> flowable;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //调用P层
        getMvpPresenter().getpresenter();

    }


    //成功方法
    @Override
    public void chenggong(Bean bean) {
        Log.i("sssssssss233",bean.getData().get(0).getName());
    }

    @Override
    public void shibai(String shibai) {
        Log.i("sssssssss2",shibai.toString());
    }
}

想调用上面的积类MVP必须下载码云上的依赖库方可调用!切记 → 点击打开下载MVP依赖库链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值