MvP请求接口,进行客户端登录

有很多人都对MVP有误区,感觉就是他妈的难啊!今天就写一篇MVP的登录有关代码

1.首先在清单中配入网络权限

<uses-permission android:name="android.permission.INTERNET"/>
2.配置你需要的框架依赖(我的OKHttpClient3,Gson)

compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.google.code.gson:gson:2.8.1'
3.创建你的布局

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/mobile"
        android:hint="请输入手机号"
        android:layout_marginTop="50dp"/>
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/password"
        android:hint="请输入密码"/>

</LinearLayout>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="登录"
        android:textSize="18sp"
        android:layout_marginLeft="100dp"
        android:onClick="Loginbut"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册"
        android:textSize="18sp"
        android:layout_marginLeft="50dp"/>
</LinearLayout>

4.创建model层,view层,presenter层

就是创建model层,view层,presenter层

5.创建Constants类,用来定义接口
public class Consetion {
    public static final String HOST_NAME = "http://120.27.23.105";
    public static final String LOGINURL = HOST_NAME+"/user/login";
}
6.创建Bean类
package com.example.my_mvp_model;

/**
 * Author : wyh
 * Postbox : [email protected]
 * Cellphone :185****1723
 * QQ : 1229825508
 * Thinking :
 */

public class LoginBean {

    /**
     * msg : 登录成功
     * code : 0
     * data : {"age":null,"appkey":"f91c611904a467b4","appsecret":"AD145AE49A1451CC85769E796446036B","createtime":"2018-01-06T16:52:32","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"15800002222","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,"token":"EA7FA0F2475F8C4D139F56BEB4FAEEB6","uid":10152,"userId":null,"username":"15800002222"}
     */

    private String msg;
    private String code;
    private DataBean data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * age : null
         * appkey : f91c611904a467b4
         * appsecret : AD145AE49A1451CC85769E796446036B
         * createtime : 2018-01-06T16:52:32
         * email : null
         * fans : null
         * follow : null
         * gender : null
         * icon : null
         * latitude : null
         * longitude : null
         * mobile : 15800002222
         * money : null
         * nickname : null
         * password : 8F669074CAF5513351A2DE5CC22AC04C
         * praiseNum : null
         * token : EA7FA0F2475F8C4D139F56BEB4FAEEB6
         * uid : 10152
         * userId : null
         * username : 15800002222
         */

        private Object age;
        private String appkey;
        private String appsecret;
        private String createtime;
        private Object email;
        private Object fans;
        private Object follow;
        private Object gender;
        private Object icon;
        private Object latitude;
        private Object longitude;
        private String mobile;
        private Object money;
        private Object nickname;
        private String password;
        private Object praiseNum;
        private String token;
        private int uid;
        private Object userId;
        private String username;

        public Object getAge() {
            return age;
        }

        public void setAge(Object age) {
            this.age = age;
        }

        public String getAppkey() {
            return appkey;
        }

        public void setAppkey(String appkey) {
            this.appkey = appkey;
        }

        public String getAppsecret() {
            return appsecret;
        }

        public void setAppsecret(String appsecret) {
            this.appsecret = appsecret;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public Object getEmail() {
            return email;
        }

        public void setEmail(Object email) {
            this.email = email;
        }

        public Object getFans() {
            return fans;
        }

        public void setFans(Object fans) {
            this.fans = fans;
        }

        public Object getFollow() {
            return follow;
        }

        public void setFollow(Object follow) {
            this.follow = follow;
        }

        public Object getGender() {
            return gender;
        }

        public void setGender(Object gender) {
            this.gender = gender;
        }

        public Object getIcon() {
            return icon;
        }

        public void setIcon(Object icon) {
            this.icon = icon;
        }

        public Object getLatitude() {
            return latitude;
        }

        public void setLatitude(Object latitude) {
            this.latitude = latitude;
        }

        public Object getLongitude() {
            return longitude;
        }

        public void setLongitude(Object longitude) {
            this.longitude = longitude;
        }

        public String getMobile() {
            return mobile;
        }

        public void setMobile(String mobile) {
            this.mobile = mobile;
        }

        public Object getMoney() {
            return money;
        }

        public void setMoney(Object money) {
            this.money = money;
        }

        public Object getNickname() {
            return nickname;
        }

        public void setNickname(Object nickname) {
            this.nickname = nickname;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Object getPraiseNum() {
            return praiseNum;
        }

        public void setPraiseNum(Object praiseNum) {
            this.praiseNum = praiseNum;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public int getUid() {
            return uid;
        }

        public void setUid(int uid) {
            this.uid = uid;
        }

        public Object getUserId() {
            return userId;
        }

        public void setUserId(Object userId) {
            this.userId = userId;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }
    }
}
7.创建ILoginView接口(隶属View层)
public interface ILoginView {
    void onFailed(String msg);
    void onSuccess(Object o);

}
8.在MainActivity中编写(隶属View层)
package com.example.my_mvp_model.view;

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

import com.example.my_mvp_model.R;
import com.example.my_mvp_model.presenter.LoginPresenter;

public class MainActivity extends AppCompatActivity implements ILoginView{

    private EditText emobile;
    private EditText epassword;
    private LoginPresenter logp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        emobile = findViewById(R.id.mobile);
        epassword = findViewById(R.id.password);

        logp = new LoginPresenter(this);

    }

    public void Loginbut(View v){
        String model = emobile.getText().toString();
        String password = epassword.getText().toString();
        logp.login(model,password);
    }

    @Override
    public void onFailed(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSuccess(Object o) {
        Toast.makeText(this, o.toString(), Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        logp.onDestosy();;
    }
}
9.创建presenter层presenter层是与其他两层链接的桥梁,创建ILoginPresenter接口(隶属presenter层)
public interface ILoginPresenter {
    void login(String mobile,String password);
    void failed(String msg);
    void Success(Object o);
    void onDestosy();
}
10.创建Loginpresenter类(隶属presenter层)
public class LoginPresenter implements ILoginPresenter {
    private ILoginView iLoginView;
    private LoginModel loginModel;

    public LoginPresenter(ILoginView iLoginView) {
        this.iLoginView = iLoginView;
        loginModel = new LoginModel();
    }

    @Override
    public void login(String mobile, String password) {
        loginModel.login(mobile, password, this);
    }

    @Override
    public void failed(String msg) {
        if (iLoginView == null) {
            return;
        }
        iLoginView.onFailed(msg);
    }

    @Override
    public void Success(Object o) {

        if (iLoginView == null) {
            return;
        }
        Gson gson = new Gson();
        LoginBean loginBean = gson.fromJson(o.toString(), LoginBean.class);
        String code = loginBean.getCode();
        if ("0".equals(code)) {
            iLoginView.onFailed(loginBean.getMsg());
        } else {
            iLoginView.onSuccess(loginBean.getMsg());
        }
    }

    @Override
    public void onDestosy() {

        if (iLoginView != null) {
            iLoginView = null;
        }
    }
}
11.创建ILoginmodel接口(隶属model层)
public interface ILoginmodel {
    void login(String model, String password, ILoginPresenter iLoginPresenter);
}
12.创建Loginmodel类(隶属model层)
public class LoginModel implements ILoginmodel {
    Handler handler = new Handler();
    public void login(String mobile, String password, final ILoginPresenter iLoginPresenter){
        String url = Constants.LOGINURL+"?mobile="+mobile+"&password="+password;
        OkHttpClient okHttpClient = new OkHttpClient();
        Request mcall = new Request
                .Builder()
                .url(url)
                .build();
        Call call = okHttpClient.newCall(mcall);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        iLoginPresenter.failed(e.getMessage());
                    }
                });
            }

            @Override
            public void onResponse(Response response) throws IOException {
                if(response.isSuccessful()){
                    final String string = response.body().string();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            iLoginPresenter.Success(string);
                        }
                    });
                }
            }
        });
    }

}
此代码仅供参考,写的时候注意model层,view层,presenter层的顺序,防止报错。(完毕)

猜你喜欢

转载自blog.csdn.net/wyh_file/article/details/78990244