MVP(登入+註冊 .乞丐版)
阿新 • • 發佈:2018-12-05
1.登入佈局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".model.MainActivity" android:orientation="vertical" > <EditText android:id="@+id/etname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="請輸入賬號" android:layout_gravity="center_horizontal"/> <EditText android:id="@+id/etpass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="請輸入密碼" android:layout_gravity="center_horizontal"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="100dp" android:layout_gravity="center_horizontal"> <Button android:id="@+id/deng" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登入" android:layout_marginTop="50dp" android:layout_gravity="center_horizontal"/> <Button android:id="@+id/zhu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="註冊" android:layout_marginTop="50dp" android:layout_gravity="center_horizontal"/> </LinearLayout> </LinearLayout>
註冊佈局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".model.Main2Activity" android:orientation="vertical"> <EditText android:id="@+id/ename" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="請輸入賬號" android:layout_gravity="center"/> <EditText android:id="@+id/epass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="請輸入密碼" android:layout_marginTop="50dp" android:layout_gravity="center"/> <Button android:id="@+id/sing" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="註冊" android:layout_marginTop="50dp" android:layout_gravity="center_horizontal"/> </LinearLayout>
2.V
package com.bw.ymy.mvptext1.view;
public interface IView<T> {
//成功
void success(T data);
//失敗
void fail(String msg);
}
3.M
登入
package com.bw.ymy.mvptext1.model; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.bw.ymy.mvptext1.R; import com.bw.ymy.mvptext1.presemter.Login; import com.bw.ymy.mvptext1.view.IView; /** * 1.首先建立一個 Interstance View介面類 * 2.主頁面繼承 Activity implements View.OnClickListener, 上一步寫的類 * * * */ public class MainActivity extends Activity implements View.OnClickListener,IView { EditText etname,etpass; //P Login mlogin; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //建立一個方法,獲取資源id initView(); //建立一個實列 initPersenter(); } private void initPersenter() { mlogin=new Login(this); } //獲取資源id private void initView() { etname=findViewById(R.id.etname); etpass=findViewById(R.id.etpass); //無效 作廢 etpass.invalidate(); //點選登入 http://120.27.23.105/user/login?mobile=手機號&password=密碼 findViewById(R.id.deng).setOnClickListener(this); //點選註冊 http://120.27.23.105/user/reg?mobile=手機號&password=密碼 findViewById(R.id.zhu).setOnClickListener(this); } @Override public void onClick(View v) { int id=v.getId(); switch (id) { //點選登入 case R.id.deng: //吧User類拿過來 引用 User user=new User(etname.getText().toString(),etpass.getText().toString()); mlogin.submit(user); break; //點選註冊 case R.id.zhu: Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); break; default: break; } } //解綁 @Override protected void onDestroy() { super.onDestroy(); mlogin.detachView(); } //成功 @Override public void success(Object data) { Toast.makeText(this,"success",Toast.LENGTH_LONG).show(); } //失敗 @Override public void fail(String msg) { Toast.makeText(this,msg,Toast.LENGTH_LONG).show(); } }
3.1 註冊
package com.bw.ymy.mvptext1.model;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.bw.ymy.mvptext1.R;
import com.bw.ymy.mvptext1.presemter.Sing;
import com.bw.ymy.mvptext1.view.IView;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener,IView
{
private EditText ename,epass;
Sing sing;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initview();
initpersenter();
}
private void initpersenter() {
sing=new Sing(this);
}
private void initview() {
//獲取資源id
ename=findViewById(R.id.ename);
epass=findViewById(R.id.epass);
epass.invalidate();
findViewById(R.id.sing).setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id=v.getId();
switch (id)
{
case R.id.sing:
User user=new User(ename.getText().toString(),epass.getText().toString());
sing.submit(user);
break;
}
}
@Override
public void success(Object data) {
Toast.makeText(this,"成功",Toast.LENGTH_LONG).show();
}
@Override
public void fail(String msg) {
Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
}
}
3.2 User類
package com.bw.ymy.mvptext1.model;
public class User {
private String name;
private String pass;
public User(String name, String pass) {
this.name = name;
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
4.P
登入
package com.bw.ymy.mvptext1.presemter;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.bw.ymy.mvptext1.Bean.LoginBean;
import com.bw.ymy.mvptext1.Utils.Netius;
import com.bw.ymy.mvptext1.model.User;
import com.bw.ymy.mvptext1.view.IView;
public class Login {
//把第一個實列拿過來
private IView mIView;
public Login(@NonNull IView iView)
{
mIView=iView;
}
public void submit(User user)
{
if(checkName(user.getName())&&checkPass(user.getPass()))
{
Netius.getInsatnce().requestData("http://120.27.23.105/user/login?mobile="+user.getName()+"&password="+user.getPass(),
LoginBean.class,new Netius.Callback<LoginBean>(){
@Override
public void onsuccess(LoginBean loginBean) {
if(loginBean.getCode()==0)
{
mIView.success(loginBean);
}else
{
mIView.fail("賬號密碼失敗");
}
}
});
}
else
{
mIView.fail("賬號或者密碼錯誤");
}
}
public void detachView()
{
mIView=null;
}
//判斷賬號
private boolean checkName(String name)
{
return !TextUtils.isEmpty(name);
}
//判斷密碼大於6位
private boolean checkPass(String pass)
{
return (!TextUtils.isEmpty(pass)&&pass.length()>=6);
}
}
4.1 註冊
package com.bw.ymy.mvptext1.presemter;
import com.bw.ymy.mvptext1.Bean.SingBean;
import com.bw.ymy.mvptext1.Utils.Netius;
import com.bw.ymy.mvptext1.model.User;
import com.bw.ymy.mvptext1.view.IView;
public class Sing {
private IView iView;
public Sing(IView iView) {
this.iView = iView;
}
public void submit(User user)
{
if(checkName(user.getName())&&checkPass(user.getPass()))
{
Netius.getInsatnce().requestData("http://120.27.23.105/user/reg?mobile="+user.getName()+"&password="+user.getPass(),
SingBean.class,new Netius.Callback<SingBean>(){
@Override
public void onsuccess(SingBean singBean) {
if(singBean.getCode()==0)
{
iView.success(singBean);
}else
{
iView.fail(singBean.getMsg());
}
}
});
}else
{
iView.fail("請輸入正確的賬號和密碼");
}
}
//解綁
public void detach()
{
iView=null;
}
//判斷密碼不少於6位
protected boolean checkPass(String pass)
{
return !pass.isEmpty()&&pass.length()==6;
}
//判斷手機號大於11位
private boolean checkName(String name)
{
return !name.isEmpty()&&name.length()==11;
}
}
5.工具類
package com.bw.ymy.mvptext1.Utils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class Netius {
private static Netius insatnce;
public Netius() {
}
public static Netius getInsatnce()
{
if(insatnce==null)
{
insatnce=new Netius();
}
return insatnce;
}
public interface Callback<T>
{
void onsuccess(T t);
}
//是否可以用網路
public boolean hasNetWork(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo!=null&&activeNetworkInfo.isAvailable();
}
//判斷是否是手機網路
public boolean isMobile(Context context)
{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo.getType()==ConnectivityManager.TYPE_MOBILE;
}
public void requestData(final String urlstr,final Class clazz,final Callback callback)
{
new AsyncTask<String,Void,Object>()
{
@Override
protected Object doInBackground(String... strings) {
return requestData(urlstr,clazz);
}
@Override
protected void onPostExecute(Object o) {
callback.onsuccess(o);
}
}.execute(urlstr);
}
public <T> T requestData(String urlstr,Class clazz)
{
return (T)new Gson().fromJson(requestData(urlstr),clazz);
}
public String requestData(String urlstr)
{
String result="";
try {
URL url=new URL(urlstr);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if(responseCode==200){
String s = streamTostring(urlConnection.getInputStream());
return s;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public String streamTostring(InputStream is)throws IOException
{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
StringBuilder builder=new StringBuilder();
for (String tmp=bufferedReader.readLine();tmp!=null;tmp=bufferedReader.readLine()){
builder.append(tmp);
}
return builder.toString();
}
}
6.
登入的Bean類
package com.bw.ymy.mvptext1.Bean;
public class LoginBean {
/**
* msg : 登入成功
* code : 0
* data : {"age":null,"appkey":"dba243496835d7fe","appsecret":"075A1D91B6EA54A018F21DA8DA1CE0A8","createtime":"2018-11-27T19:52:50","email":null,"fans":null,"follow":null,"gender":null,"icon":null,"latitude":null,"longitude":null,"mobile":"15233802510","money":null,"nickname":null,"password":"8F669074CAF5513351A2DE5CC22AC04C","praiseNum":null,"token":"BB3D32DAA139E7646E92FD86DAE83DD5","uid":22989,"userId":null,"username":"15233802510"}
*/
private String msg;
private int code;
private DataBean data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public DataBean getData() {
return data;
}
public void setData(DataBean data) {
this.data = data;
}
public static class DataBean {
/**
* age : null
* appkey : dba243496835d7fe
* appsecret : 075A1D91B6EA54A018F21DA8DA1CE0A8
* createtime : 2018-11-27T19:52:50
* email : null
* fans : null
* follow : null
* gender : null
* icon : null
* latitude : null
* longitude : null
* mobile : 15233802510
* money : null
* nickname : null
* password : 8F669074CAF5513351A2DE5CC22AC04C
* praiseNum : null
* token : BB3D32DAA139E7646E92FD86DAE83DD5
* uid : 22989
* userId : null
* username : 15233802510
*/
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;
}
}
}
註冊的
package com.bw.ymy.mvptext1.Bean;
public class SingBean {
private String msg;
private int code;
public SingBean(String msg, int code) {
this.msg = msg;
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
效果圖: