MVP框架登录

布局页面<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="150dp"
    android:gravity="center_horizontal"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="5dp"
        android:text="手机号:"
        android:textSize="18sp" />

    <EditText
        android:id="@+id/edname"
        android:layout_width="400dp"
        android:layout_height="wrap_content"
        android:hint="请输入手机号"
        android:padding="5dp" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:gravity="center_horizontal"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="5dp"
        android:text="密    码:"
        android:textSize="18sp" />

    <EditText
        android:id="@+id/edpwd"
        android:layout_width="400dp"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:inputType="textPassword"
        android:padding="5dp" />
</LinearLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="50dp"
    android:paddingRight="55dp">

    <CheckBox
        android:id="@+id/jizhu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="记住密码" />

    <CheckBox
        android:id="@+id/zidong"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="自动登录" />
</RelativeLayout>

<Button
    android:id="@+id/submit_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="login_btn"
    android:text="提交" />
<Button
    android:id="@+id/login_qq_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="login_qq_btn"
    android:text="QQ登录"/>

代码页面
public class MainActivity extends AppCompatActivity implements DataCall {

private EditText edname;
private EditText edpwd;

private CheckBox jizhu;
private CheckBox zidong;
private SharedPreferences sp;
private BasePresenter presenter;

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

    presenter = new MyPresenter(this);
}

private void initData() {
    boolean ji = sp.getBoolean("jizhu", false);
    if (ji) {
        jizhu.setChecked(ji);
        String name = sp.getString("name", "");
        String pwd = sp.getString("pwd", "");
        edname.setText(name);
        edpwd.setText(pwd);
    }
    final boolean zi = sp.getBoolean("zidong", false);
    if (zi) {
        startActivity(new Intent(MainActivity.this, TwoActivity.class));
        finish();
    }
    //设置自动登录必须记住密码逻辑
    zidong.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                MainActivity.this.jizhu.setChecked(true);
            }
        }
    });
    //设置不记住密码就无法实现自动登录逻辑
    jizhu.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (!isChecked) {
                zidong.setChecked(false);
            }
        }
    });
}


public void login_btn(View view) {
    String names = edname.getText().toString();
    String pwds = edpwd.getText().toString();
    presenter.requestData(names, pwds);
}

private void initView() {
    edname = (EditText) findViewById(R.id.edname);
    edpwd = (EditText) findViewById(R.id.edpwd);
    jizhu = (CheckBox) findViewById(R.id.jizhu);
    zidong = (CheckBox) findViewById(R.id.zidong);
    sp = getSharedPreferences("login", MODE_PRIVATE);
}

@Override
public void success(User data) {
    Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
    SharedPreferences.Editor edit = sp.edit();
    edit.putString("name", edname.getText().toString());
    edit.putString("pwd", edpwd.getText().toString());
    edit.putBoolean("jizhu", jizhu.isChecked());
    edit.putBoolean("zidong", zidong.isChecked());
    edit.commit();
    startActivity(new Intent(MainActivity.this, TwoActivity.class));
    finish();

}

@Override
public void fail(Result result) {
    Toast.makeText(this, result.getCode()+"" + result.getMsg(), Toast.LENGTH_SHORT).show();
}

public void login_qq_btn(View v){
    if (v.getId()==R.id.login_qq_btn){
        if(Build.VERSION.SDK_INT>=23){//QQ需要申请写入权限
            String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
            ActivityCompat.requestPermissions(this,mPermissionList,123);

        }
    }

}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode==123){
        UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.QQ, authListener);
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
UMAuthListener authListener = new UMAuthListener() {

    @Override
    public void onStart(SHARE_MEDIA platform) {

    }

    @Override
    public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {

        Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(MainActivity.this,TwoActivity.class);
        startActivity(intent);
        finish();
    }
    @Override
    public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
        Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onCancel(SHARE_MEDIA share_media, int i) {
        Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
    }

    /**
     * @param platform 平台名称
     * @param action   行为序号,开发者用不上
     * @param data     用户资料返回
     * @desc 授权成功的回调
     */

};

}

M层
public class MyModel {
public static Result login(final String name,final String pwd){
String resultString = Utils.get(“http://www.zhaoapi.cn/user/login?mobile=
+name+"&password="+pwd);

    Gson gson = new Gson();
    Type type = new TypeToken<Result<User>>(){}.getType();
    Result result = gson.fromJson(resultString,type);
    return result;
}

}

C层
public interface DataCall {
void success(T data);
void fail(Result result);
}
public class DTApplication extends Application {

private static DTApplication instance;
private SharedPreferences mSharedPreferences;

@Override
public void onCreate() {
    super.onCreate();
    instance = this;
    mSharedPreferences = getSharedPreferences("application",
            Context.MODE_PRIVATE);
    UMConfigure.init(this,"5c089159b465f59767000066","小米",UMConfigure.DEVICE_TYPE_PHONE,"");
    /**
     * 设置组件化的Log开关
     * 参数: boolean 默认为false,如需查看LOG设置为true
     */
    UMConfigure.setLogEnabled(true);
    PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}

public static DTApplication getInstance() {
    return instance;
}

public SharedPreferences getShare() {
    return mSharedPreferences;
}

}
P层
public abstract class BasePresenter {

DataCall dataCall;

public BasePresenter(DataCall dataCall){
    this.dataCall = dataCall;
}

Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        Result result = (Result) msg.obj;
        if (result.getCode()==0){
            dataCall.success(result.getData());
        }else {
            dataCall.fail(result);
        }
    }
};

public void requestData(final String...args){
    new Thread(new Runnable() {
        @Override
        public void run() {
            Message message = handler.obtainMessage();
            message.obj = getData(args);
            handler.sendMessage(message);
        }
    }).start();
}

protected abstract Object getData(String[] args);

}
public abstract class BasePresenter {

DataCall dataCall;

public BasePresenter(DataCall dataCall){
    this.dataCall = dataCall;
}

Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        Result result = (Result) msg.obj;
        if (result.getCode()==0){
            dataCall.success(result.getData());
        }else {
            dataCall.fail(result);
        }
    }
};

public void requestData(final String...args){
    new Thread(new Runnable() {
        @Override
        public void run() {
            Message message = handler.obtainMessage();
            message.obj = getData(args);
            handler.sendMessage(message);
        }
    }).start();
}

protected abstract Object getData(String[] args);

}
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值