MVP登录记住密码自动登录

//先搭建//MVP框架

//网络请求数据所以记得写网络权限

//back
package com.zhuyue.bwie.com.mvploginlx.back;

public interface CallBack {
void setData(T user);
void setError(T error);
}
//utils工具包

package com.zhuyue.bwie.com.mvploginlx.units;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/网络处理工具类/
public class HttpUtils {
/*
* Get请求方式
* */
public static String get(String urlStr) throws Exception {
URL url = new URL(urlStr);
//由一个有效的网址服务返回这个对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod(“GET”);
connection.setConnectTimeout(5000);
InputStream stream = connection.getInputStream();
String inputStr = getInputStr(stream);
return inputStr;
}

//把流转成字符串
private static String getInputStr(InputStream stream) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(stream));
    StringBuffer sb = new StringBuffer();
    String str = null;
    while ((str = br.readLine()) != null) {
        sb.append(str);
    }
    return sb.toString();
}

/*
* Post请求方式
* */
public static String post(String urlStr, String mobile, String pass) throws Exception {
    String inputStr = "";
    URL url = new URL(urlStr);
    //由一个有效的网址服务返回这个对象
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    //设置请求方式
    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setConnectTimeout(5000);
    OutputStream outputStream = connection.getOutputStream();
    String params = "mobile=" + mobile + "&password=" + pass;
    outputStream.write(params.getBytes());
    if (connection.getResponseCode() == 200) {
        InputStream stream = connection.getInputStream();
        inputStr = getInputStr(stream);
    }

    return inputStr;
}

}
//BaseActivity 抽的基类

package com.zhuyue.bwie.com.mvploginlx.base;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
protected abstract int getLayout();
protected abstract void initViews();
protected abstract void getOnCilck();
protected abstract void processLgic();
void init() {
if (getLayout()!=0){
setContentView(getLayout());
initViews();
getOnCilck();
processLgic();
}else {
throw new IllegalStateException(“请加载布局文件”);

   }
 }

}

//view

package com.zhuyue.bwie.com.mvploginlx.view;

public interface IView {
void success(T data);
void error(T error);
}

//Model接口

package com.zhuyue.bwie.com.mvploginlx.model;

import com.zhuyue.bwie.com.mvploginlx.back.CallBack;

public interface Model {
void getData(String url, String username, String password, CallBack callBack);

}

//ModelImpl

package com.zhuyue.bwie.com.mvploginlx.model;

import android.os.AsyncTask;
import android.os.Looper;

import com.google.gson.Gson;
import com.zhuyue.bwie.com.mvploginlx.back.CallBack;
import com.zhuyue.bwie.com.mvploginlx.bean.User;
import com.zhuyue.bwie.com.mvploginlx.units.HttpUtils;

public class ModelImpl implements Model {
private CallBack callBack;

@Override
public void getData(String url, String username, String password, CallBack callBack) {
  this.callBack=callBack;
  String urlx=url+"?username="+username+"&password="+password;

  new MyTaskone().execute(urlx);
}
class MyTaskone extends AsyncTask<String,Void,User>{

    @Override
    protected User doInBackground(String... strings) {
        try {
            String json=HttpUtils.get(strings[0]);
            Gson gson=new Gson();
            User user = gson.fromJson(json, User.class);
            return user;
        } catch (Exception e) {
            Looper.prepare();
            callBack.setError("异常");
            Looper.loop();
        }
        return null;
    }

    @Override
    protected void onPostExecute(User dataBeans) {
        super.onPostExecute(dataBeans);
        callBack.setData(dataBeans);
    }
}

}

//Present

package com.zhuyue.bwie.com.mvploginlx.present;

public interface Present {
void startRequest(String url,String username,String password);
}

//PresentImpl

package com.zhuyue.bwie.com.mvploginlx.present;

import android.util.Log;

import com.zhuyue.bwie.com.mvploginlx.back.CallBack;
import com.zhuyue.bwie.com.mvploginlx.model.ModelImpl;
import com.zhuyue.bwie.com.mvploginlx.view.IView;

public class PresentImpl implements Present{
private IView iView;
private final ModelImpl model;

public PresentImpl(IView iView) {
    this.iView = iView;
    model = new ModelImpl();
}

@Override
public void startRequest(String mUrl, String username, String password) {
 model.getData(mUrl, username, password, new CallBack() {
     @Override
     public void setData(Object user) {
         iView.success(user);
     }

     @Override
     public void setError(Object error) {
        iView.error(error);
     }
 });

}

}

//ManinActivity的xml

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
   android:layout_gravity="center_horizontal"
    android:padding="8dp"
    android:text="登录页面"
   />
<EditText
    android:id="@+id/Edit_Name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="6dp"
    android:hint="请输入账号"/>
<EditText
    android:id="@+id/Edit_Pass"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="6dp"
    android:hint="请输入密码"
    android:inputType="textPassword"/>
 <RelativeLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
     <CheckBox
         android:id="@+id/CB1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="记住密码"
         />
         <CheckBox
             android:id="@+id/CB2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="自动登录"
             android:layout_alignParentRight="true"
             />
 </RelativeLayout>
  <Button
      android:id="@+id/Login_Btn"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="登录"/>
<Button
    android:id="@+id/ZhuChe_Btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="注册"/>

//ManinActivity

package com.zhuyue.bwie.com.mvploginlx;

import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import com.zhuyue.bwie.com.mvploginlx.base.BaseActivity;
import com.zhuyue.bwie.com.mvploginlx.bean.User;
import com.zhuyue.bwie.com.mvploginlx.present.PresentImpl;
import com.zhuyue.bwie.com.mvploginlx.ui.TwoActivity;
import com.zhuyue.bwie.com.mvploginlx.view.IView;

public class MainActivity extends BaseActivity implements IView {
private String mUrl = “http://www.xieast.com/api/user/login.php”;
private EditText mEditName;
private EditText mEditPass;
private CheckBox cb1;
private CheckBox cb2;
private Button mLoginBtn;
private SharedPreferences sp;
private SharedPreferences.Editor mEdit;
private PresentImpl present;
private Button ZhuCheBtn;

@Override
protected int getLayout() {
    return R.layout.activity_main;
}

@Override
protected void initViews() {
    mEditName = findViewById(R.id.Edit_Name);
    mEditPass = findViewById(R.id.Edit_Pass);
    cb1 = findViewById(R.id.CB1);
    cb2 = findViewById(R.id.CB2);
    mLoginBtn = findViewById(R.id.Login_Btn);
    ZhuCheBtn = findViewById(R.id.ZhuChe_Btn);
}

@Override
protected void getOnCilck() {
    mLoginBtn.setOnClickListener(this);
    ZhuCheBtn.setOnClickListener(this);
    cb1.setOnClickListener(this);
    cb2.setOnClickListener(this);
}

@Override
protected void processLgic() {
    sp = getSharedPreferences("zy", MODE_PRIVATE);
    mEdit = sp.edit();
    if (sp.getBoolean("cb1", false)) {
        mEditName.setText(sp.getString("name", ""));
        mEditPass.setText(sp.getString("pass", ""));
        cb1.setChecked(true);
    }
    if (sp.getBoolean("cb2", false)) {
        mEditName.setText(sp.getString("name", ""));
        mEditPass.setText(sp.getString("pass", ""));
        startActivity(new Intent(this, TwoActivity.class));
        finish();
    }
    present = new PresentImpl(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.Login_Btn:
            String username = mEditName.getText().toString().trim();
            String password = mEditPass.getText().toString().trim();
            if (username.isEmpty() || password.isEmpty()) {
                Toast.makeText(this, "账号和密码不能为空", Toast.LENGTH_SHORT).show();
                return;
            } else {
                present.startRequest(mUrl, username, password);
            }
            break;
        case R.id.CB2:
            if (cb2.isChecked()) {
                cb1.setChecked(true);
            }
            break;
        case R.id.CB1:
            if (!cb1.isChecked()) {
                cb2.setChecked(false);
            }
            break;
    }
}

@Override
public void success(T data) {
    User user = (User) data;
    if (user.getCode() == 100) {
        Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
        String username = mEditName.getText().toString().trim();
        String password = mEditPass.getText().toString().trim();
        //记住密码
        if (cb1.isChecked()) {
            mEdit.putBoolean("cb1", true);
            mEdit.putString("name", username);
            mEdit.putString("pass", password);
        } else {
            mEdit.putBoolean("cb1", false);
        }
        //自动登录
        if (cb2.isChecked()) {
            mEdit.putBoolean("cb2", true);
            mEdit.putString("name", username);
            mEdit.putString("pass", password);
        } else {
            mEdit.putBoolean("cb2", false);
        }
        mEdit.commit();
        startActivity(new Intent(this, TwoActivity.class));
        finish();
    } else {
        Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
    }
}

@Override
public void error(T error) {
    String e = (String) error;
    Toast.makeText(this,e, Toast.LENGTH_SHORT).show();
}

}

//注册
package com.zhuyue.bwie.com.mvploginlx.ui;

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

import com.zhuyue.bwie.com.mvploginlx.R;
import com.zhuyue.bwie.com.mvploginlx.base.BaseActivity;
import com.zhuyue.bwie.com.mvploginlx.bean.Register;
import com.zhuyue.bwie.com.mvploginlx.bean.User;
import com.zhuyue.bwie.com.mvploginlx.present.PresentImpl;
import com.zhuyue.bwie.com.mvploginlx.view.IView;

public class ThreeActivity extends BaseActivity implements IView {

private String mUrl = "http://120.27.23.105/user/reg";
private EditText mEditName;
private EditText mEditPass;
private Button zhuCheBtn;
private PresentImpl present;


@Override
protected int getLayout() {
    return R.layout.activity_three;
}

@Override
protected void initViews() {
    mEditName = findViewById(R.id.Edit_Name);
    mEditPass = findViewById(R.id.Edit_Pass);
    zhuCheBtn = findViewById(R.id.ZhuChe_Btn);
}

@Override
protected void getOnCilck() {
    zhuCheBtn.setOnClickListener(this);
}

@Override
protected void processLgic() {
    present = new PresentImpl(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.ZhuChe_Btn:
            String username = mEditName.getText().toString().trim();
            String password = mEditPass.getText().toString().trim();
            if (username.isEmpty() || password.isEmpty()) {
                Toast.makeText(this, "账号密码不能为空", Toast.LENGTH_SHORT).show();
                return;
            } else {
                present.startRequest(mUrl, username, password);
            }
            break;
    }
}

@Override
public void success(T data) {
    User user= (User) data;
    if (user.getCode()==1) {
        Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
        finish();
    }

}

@Override
public void error(T error) {
    Toast.makeText(this,error.toString()+"失败", Toast.LENGTH_SHORT).show();
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值