MVP的使用方法

IV接口数据展示到View
Ip接口写的是绑定、解绑、传递请求到M层
IM接口是p层传递的数据、异步请求、然后拼接接口并且使用PostMan 然后回传传

然后P层需要关联View
还有连接Model 调用Model的接口 并且实现接口类
并把接口软引用进行处理、
并且把Model拿到的数据传递给Iview接口

V层需要调用P层 P层的数据绑定给当前的Activity、然后当点击的时候传入输入的值、

//上代码
在这里插入图片描述
先分包

``Iv的展示数据
package com.example.dell.dierci.view;

public interface IView {
//数据展示到View
public void showData(String response);
}

Ip需要绑定View和解绑View 然后需要关联M层

package com.example.dell.dierci.presenter;

import com.example.dell.dierci.view.IView;

public interface IPresenter {
    //绑定绑定解绑
    public void Attach(IView iView);
    public void Detach(IView iView);
    //传递给M层进行数据请求
    public void requestData(String name,String pwd);

}

IM层需要服务器网络请i求、然后服务器会返回值

package com.example.dell.dierci.model;

public interface IModel {
//请求数据
public void getData(String name,String pwd,CallBack callBack);

public interface CallBack{
    //成功
    public void Success(String data);
    //返回
    public void Fail(String error);
}

}

IM的实现类 需要请求数据 创建异步请求请求、然后使用PostMan、然后把数据回传给P层

package com.example.dell.dierci.model;

import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class loginModelImpl implements IModel {
    private String str="http://172.17.8.100/small/user/v1/register";
    @Override
    public void getData(String name, String pwd, CallBack callBack) {
        //请求数据
        //发送异步请求
        new SubAysncTask(name, pwd,callBack).execute(str);

    }
    //内部类创建
    class SubAysncTask extends AsyncTask<String, Integer, String> {

        String userName;
        String pwd;
        CallBack callBack;

        public SubAysncTask(String userName, String pwd, CallBack callBack) {
            this.userName = userName;
            this.pwd = pwd;
            this.callBack = callBack;
        }

        @Override
        protected String doInBackground(String... urlStrings) {
            try {
                //请求的URL字串
                String urlString = urlStrings[0];
                //String completeUrlString = urlString + "?phone=\'userName\'+pwd=\'pwd\'";
                String completeUrlString = urlString + "?phone=" + userName + "&pwd=" + pwd;
                //请求的URL地址
                URL url = new URL(completeUrlString);
                //请求对象
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                //设置请求方法
                //参数提交
                //提交的数据有phone、pwd
                connection.setRequestMethod("POST");
                //连接
                connection.connect();
                //判断请求码
                if (connection.getResponseCode() == 200) {
                    StringBuilder stringBuilder = new StringBuilder();
                    String line = null;
                    //输入流读取
                    InputStream inputStream = connection.getInputStream();
                    //搞笑字节流
                    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                    while ((line = br.readLine()) != null) {
                        stringBuilder.append(line);
                    }
                    //把读取的内容转换成字串
                    return stringBuilder.toString();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String resposne) {
            super.onPostExecute(resposne);
            // 数据回传给P层,接口回调
            callBack.Success(resposne);
        }
    }
}

IP获取Iv的接口 和IM的接口 和IM实现的方法、然后为了防止内存泄露需要使用软引用、然后P层会调用Model的方法

package com.example.dell.dierci.presenter;

import com.example.dell.dierci.model.IModel;
import com.example.dell.dierci.model.loginModelImpl;
import com.example.dell.dierci.view.IView;

import java.lang.ref.SoftReference;

public class loginpresenterImpl implements IPresenter {
    IView iView;
    private IModel iModel;
    private SoftReference<IModel> reference;

    @Override
    public void Attach(IView iView) {
        this.iView = iView;
        //imodel实现的是loginModelImpl方法
        //强引用 还需要弱引用转换
        iModel=new loginModelImpl();
        //声明软引用
        reference=new SoftReference<>(iModel);
    }

    @Override
    public void Detach(IView iView) {
        reference.clear();
    }

    @Override
    public void requestData(String name, String pwd) {
        iModel.getData(name, pwd, new IModel.CallBack() {
            @Override
            public void Success(String data) {
                iView.showData(data);
            }

            @Override
            public void Fail(String error) {

            }
        });
    }
}

页面的代码

关联P层调用M的数据、M的数据已经村给P层 、所以调用P层 并且绑定给当前的页面、然后还有是输入的内容传给P层然后在掉给M层进行访问数据

package com.example.dell.dierci;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.dell.dierci.presenter.IPresenter;
import com.example.dell.dierci.presenter.loginpresenterImpl;
import com.example.dell.dierci.view.IView;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class MainActivity extends AppCompatActivity implements IView {
    @BindView(R.id.edit_name)
    EditText name;
    @BindView(R.id.edit_pwd)
    EditText pwd;
    @BindView(R.id.btn_click)
    Button btnClick;
    private IPresenter iPresenter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        //创建P层对象7
        iPresenter = new loginpresenterImpl();
        //接受V层对象
        iPresenter.Attach(this);


    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解绑
        iPresenter.Detach(MainActivity.this);
    }

    //展示数据 需要连接P层
    @Override
    public void showData(String response) {
        Toast.makeText(MainActivity.this, response + "", Toast.LENGTH_LONG).show();
    }

    @OnClick(R.id.btn_click)
    public void onViewClicked() {
        String nam = name.getText().toString();
        String pw = pwd.getText().toString();
        //点击时触发、P层请求M层的数据
        iPresenter.requestData(nam, pw);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值