注册 契约类mvp

本文深入解析了MVP(Model-View-Presenter)模式在Android应用开发中的实现方式,包括M层(Model)、V层(View)及P层(Presenter)的具体职责与交互流程。通过示例代码展示了如何通过契约类定义各层接口,并实现基于回调的数据请求处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

契约类

package di;

public interface IContract {
   public interface Imodl{
   public interface OnCallBack{
       void ShowData(String showmsg);
   }
   void requestData(String tel, String pass, OnCallBack onCallBack);
   }

   public interface Iview{
       void shouData(String showmsg);
   }


   public interface Ipresenter<Iview>{
       void attchview(Iview iview);
       void detachview(Iview iview);
       void requestinfo(String tel, String pass);
   }
}
M层

package di;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Response;
import util.HttpUtil;

public class ImodelImpl implements IContract.Imodl{
    private String url="http://www.zhaoapi.cn/user/reg ";
    @Override
    public void requestData(String tel, String pass, final OnCallBack onCallBack) {
      if (tel.equals("")||pass.equals("")){
        onCallBack.ShowData("用户名密码不能为空");

      }else {
        FormBody formBody=new FormBody.Builder()
                .add("mobile",tel)
                .add("password",pass)
                .build();

        HttpUtil.getinstance().postOK(url, formBody, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                String s = e.getMessage().toString();
                onCallBack.ShowData(s);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String msgs = response.body().string();
                onCallBack.ShowData(msgs);
            }
        });
    }}
}
P层

package di;

import java.lang.ref.WeakReference;

public class IpresenterImpl implements IContract.Ipresenter<IContract.Iview>{
    private IContract.Iview iview;
    private IContract.Imodl imodl;
    WeakReference<IContract.Iview> viewReferenc;
    WeakReference<IContract.Imodl> modelReferenc;
    @Override
    public void attchview(IContract.Iview iview) {
    this.iview=iview;
    imodl=new ImodelImpl();
    //软引用包裹
    viewReferenc=new WeakReference<>(iview);
    modelReferenc=new WeakReference<>(imodl);
    }

    @Override
    public void detachview(IContract.Iview iview) {
    viewReferenc.clear();
    modelReferenc.clear();
    }

    @Override
    public void requestinfo(String tel, String pass) {
    imodl.requestData(tel,pass,new IContract.Imodl.OnCallBack() {
        @Override
        public void ShowData(String showmsg) {
        iview.shouData(showmsg);
        }
    });
    }
}
V层

package com.baway.erzhoulx;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import di.IContract;
import di.IpresenterImpl;

public class MainActivity extends AppCompatActivity implements IContract.Iview{

    @BindView(R.id.ed1)
    EditText ed1;
    @BindView(R.id.ed2)
    EditText ed2;
    @BindView(R.id.bu)
    Button bu;
    private IContract.Ipresenter<IContract.Iview> ipresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
       ipresenter=new IpresenterImpl();
       ipresenter.attchview(this);
    }

    @OnClick(R.id.bu)
    public void onViewClicked() {
        String tel = ed1.getText().toString();
        String pass = ed2.getText().toString();
        ipresenter.requestinfo(tel,pass);
    }

    @Override
    public void shouData(final String showmsg) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this,showmsg,Toast.LENGTH_SHORT).show();
                Intent intent=new Intent(MainActivity.this,Login.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ipresenter.detachview(this);
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值