有很多人都对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层的顺序,防止报错。(完毕)