MVP带你入门实现登录

Posted 菜鸟东东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVP带你入门实现登录相关的知识,希望对你有一定的参考价值。

首先MVP是一种写代码的模式,因为我们用MVC的时候很难让自己的代码分离,耦合度非常高,这样就有了MVP有了P层并且,M层和V层的交互只能通过P层,这样就让我们在写

代码的时候不得不降低耦合度了;

创建包非常简单:

 

Activity属于View层所以就把它放在了View下面;

创好包之后就需要在view和model里面定义接口了,那么问题来了,要怎么定义接口,里面写什么,其实这个非常好写,只要知道自己要干什么就行。

我们今天写的是登录功能,那么我们就需要一个登录方法,还要有一个成功一个失败的方法。登录方法,我们需要去网络请求,那么就要写在Model层里面,

成功和失败是需要展示给用户,告诉用户登录的结果,所以是在view层里面的

 

Usermodel类
 @Override
    public void deng(User user, OnLis on) {
        String name = user.getName();
        String pass = user.getPass();
        if (name.equals("lxd") & pass.equals("123")) {
            on.su();
        }else{
            on.sb();
        }
    }

 


Userpres类

public class Userpres {
    private final Iview iview;
    private final Imodel imodel;

    public Userpres(Iview iview) {
        this.iview = iview;
        imodel=new Usermodel();
    }
    public void login(User user){
        imodel.deng(user, new OnLis() {
            @Override
            public void su() {
                iview.success();
            }

            @Override
            public void sb() {
                iview.deft();
            }
        });
    }
}

Activity类:

public class MainActivity extends AppCompatActivity implements Iview{
    EditText name,pass;
    Button bt;
    Userpres us=new Userpres(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name= (EditText) findViewById(R.id.editText);
        pass= (EditText) findViewById(R.id.editText2);
        bt= (Button) findViewById(R.id.button);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String s = name.getText().toString();
                String s1 = pass.getText().toString();
                us.login(new User(s,s1));
            }
        });
    }

    @Override
    public void success() {
        Toast.makeText(MainActivity.this,"成功",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void deft() {
        Toast.makeText(MainActivity.this,"失败",Toast.LENGTH_SHORT).show();
    }
}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwie.test.mvplianxi22.view.MainActivity">


<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPersonName"
    android:text="Name"
    android:ems="10"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:layout_marginEnd="72dp"
    android:layout_marginTop="38dp"
    android:id="@+id/editText" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:layout_below="@+id/editText"
    android:layout_alignStart="@+id/editText"
    android:layout_marginTop="68dp"
    android:id="@+id/editText2" />

<Button
    android:text="Button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText2"
    android:layout_alignStart="@+id/editText2"
    android:layout_marginStart="33dp"
    android:layout_marginTop="58dp"
    android:id="@+id/button" />
</RelativeLayout>

 这里在定义了一个接口可以让model中判断后通过传入的接口来调用方法,不会出现网络请求时有延迟判断:

public interface OnLis {
    void su();
    void sb();
}

 

 

以上是关于MVP带你入门实现登录的主要内容,如果未能解决你的问题,请参考以下文章

具有多个片段的活动的 MVP

Android MVP-编程思想2(代码实现初级版)

Android MVP模式实现组件和业务逻辑分离

用户登录(Material Design + Data-Binding + MVP架构模式)实现

Android——MVCMVPMVVM框架实现登录示例

MVP模式入门(结合Rxjava,Retrofit)