您的位置:首页 > 其它

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

2018-01-06 17:20 330 查看
有很多人都对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="登录"

4000
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 : hui7305265@foxmail.com
* 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层的顺序,防止报错。(完毕)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: