Android技巧2:登录注册模块解决方案

}

}

return false;

}

@Override

public void onClick(View v) {

Intent intent = null;

switch (v.getId()) {

case R.id.iv_cancel:

finish();

break;

case R.id.btn_login:

clickLogin();

break;

case R.id.iv_wechat:

clickLoginWexin();

break;

case R.id.iv_qq:

clickLoginQQ();

break;

case R.id.iv_sina:

loginThirdPlatform(SHARE_MEDIA.SINA);

break;

case R.id.tv_create_account:

enterRegister();

break;

case R.id.tv_forget_password:

enterForgetPwd();

break;

default:

break;

}

}

/**

  • 点击使用QQ快速登录

*/

private void clickLoginQQ() {

if (!Utils.isQQClientAvailable(this)) {

ToastUtils.showShort(LoginActivity.this,

getString(R.string.no_install_qq));

} else {

loginThirdPlatform(SHARE_MEDIA.QZONE);

}

}

/**

  • 点击使用微信登录

*/

private void clickLoginWexin() {

if (!Utils.isWeixinAvilible(this)) {

ToastUtils.showShort(LoginActivity.this,

getString(R.string.no_install_wechat));

} else {

loginThirdPlatform(SHARE_MEDIA.WEIXIN);

}

}

/**

  • 跳转到忘记密码

*/

private void enterForgetPwd() {

Intent intent = new Intent(this, ForgetPasswordActivity.class);

startActivity(intent);

}

/**

  • 跳转到注册页面

*/

private void enterRegister() {

Intent intent = new Intent(this, SignUpActivity.class);

startActivityForResult(intent, REQUEST_CODE_TO_REGISTER);

}

/**

  • 授权。如果授权成功,则获取用户信息

  • @param platform

*/

private void loginThirdPlatform(final SHARE_MEDIA platform) {

mController.doOauthVerify(LoginActivity.this, platform,

new UMAuthListener() {

@Override

public void onStart(SHARE_MEDIA platform) {

LogUtils.i(TAG, “onStart------”

  • Thread.currentThread().getId());

ProgressDialogUtils.getInstance().show(

LoginActivity.this,

getString(R.string.tip_begin_oauth));

}

@Override

public void onError(SocializeException e,

SHARE_MEDIA platform) {

LogUtils.i(TAG, “onError------”

  • Thread.currentThread().getId());

ToastUtils.showShort(LoginActivity.this,

getString(R.string.oauth_fail));

ProgressDialogUtils.getInstance().dismiss();

}

@Override

public void onComplete(Bundle value, SHARE_MEDIA platform) {

LogUtils.i(TAG, “onComplete------” + value.toString());

if (platform == SHARE_MEDIA.SINA) {

accessToken = value.getString(“access_key”);

} else {

accessToken = value.getString(“access_token”);

}

expires_in = value.getString(“expires_in”);

// 获取uid

uid = value.getString(AppConstants.UID);

if (value != null && !TextUtils.isEmpty(uid)) {

// uid不为空,获取用户信息

getUserInfo(platform);

} else {

ToastUtils.showShort(LoginActivity.this,

getString(R.string.oauth_fail));

}

}

@Override

public void onCancel(SHARE_MEDIA platform) {

LogUtils.i(TAG, “onCancel------”

  • Thread.currentThread().getId());

ToastUtils.showShort(LoginActivity.this,

getString(R.string.oauth_cancle));

ProgressDialogUtils.getInstance().dismiss();

}

});

}

/**

  • 获取用户信息

  • @param platform

*/

private void getUserInfo(final SHARE_MEDIA platform) {

mController.getPlatformInfo(LoginActivity.this, platform,

new UMDataListener() {

@Override

public void onStart() {

// 开始获取

LogUtils.i(“getUserInfo”, “onStart------”);

ProgressDialogUtils.getInstance().dismiss();

ProgressDialogUtils.getInstance().show(

LoginActivity.this, “正在请求…”);

}

@Override

public void onComplete(int status, Map<String, Object> info) {

try {

String sns_id = “”;

String sns_avatar = “”;

String sns_loginname = “”;

if (info != null && info.size() != 0) {

LogUtils.i(“third login”, info.toString());

if (platform == SHARE_MEDIA.SINA) { // 新浪微博

sns = AppConstants.SINA;

if (info.get(AppConstants.UID) != null) {

sns_id = info.get(AppConstants.UID)

.toString();

}

if (info.get(AppConstants.PROFILE_IMAGE_URL) != null) {

sns_avatar = info

.get(AppConstants.PROFILE_IMAGE_URL)

.toString();

}

if (info.get(AppConstants.SCREEN_NAME) != null) {

sns_loginname = info.get(

AppConstants.SCREEN_NAME)

.toString();

}

} else if (platform == SHARE_MEDIA.QZONE) { // QQ

sns = AppConstants.QQ;

if (info.get(AppConstants.UID) == null) {

ToastUtils

.showShort(

LoginActivity.this,

getString(R.string.oauth_fail));

return;

}

sns_id = info.get(AppConstants.UID)

.toString();

sns_avatar = info.get(

AppConstants.PROFILE_IMAGE_URL)

.toString();

sns_loginname = info.get(

AppConstants.SCREEN_NAME)

.toString();

} else if (platform == SHARE_MEDIA.WEIXIN) { // 微信

sns = AppConstants.WECHAT;

sns_id = info.get(AppConstants.OPENID)

.toString();

sns_avatar = info.get(

AppConstants.HEADIMG_URL)

.toString();

sns_loginname = info.get(

AppConstants.NICKNAME).toString();

}

// 这里直接保存第三方返回来的用户信息

SpUtils.putBoolean(LoginActivity.this,

AppConstants.THIRD_LOGIN, true);

LogUtils.e(“info”, sns + “,” + sns_id + “,”

  • sns_loginname);

// TODO: 这里执行第三方连接(绑定服务器账号)

}

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

}

示例代码:SignUpActivity.java

package com.devilwwj.loginandregister;

import android.app.Activity;

import android.os.Bundle;

import android.text.TextUtils;

import android.util.Log;

import android.view.KeyEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.inputmethod.EditorInfo;

import android.widget.Button;

import android.widget.TextView;

import android.widget.TextView.OnEditorActionListener;

import com.devilwwj.loginandregister.utils.RegexUtils;

import com.devilwwj.loginandregister.utils.ToastUtils;

import com.devilwwj.loginandregister.utils.VerifyCodeManager;

import com.devilwwj.loginandregister.views.CleanEditText;

/**

  • @desc 注册界面

  • 功能描述:一般会使用手机登录,通过获取手机验证码,跟服务器交互完成注册

  • Created by devilwwj on 16/1/24.

*/

public class SignUpActivity extends Activity implements OnClickListener{

private static final String TAG = “SignupActivity”;

// 界面控件

private CleanEditText phoneEdit;

private CleanEditText passwordEdit;

private CleanEditText verifyCodeEdit;

private Button getVerifiCodeButton;

private VerifyCodeManager codeManager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_signup);

initViews();

codeManager = new VerifyCodeManager(this, phoneEdit, getVerifiCodeButton);

}

/**

  • 通用findViewById,减少重复的类型转换

  • @param id

  • @return

*/

@SuppressWarnings(“unchecked”)

public final E getView(int id) {

try {

return (E) findViewById(id);

} catch (ClassCastException ex) {

Log.e(TAG, “Could not cast View to concrete class.”, ex);

throw ex;

}

}

private void initViews() {

getVerifiCodeButton = getView(R.id.btn_send_verifi_code);

getVerifiCodeButton.setOnClickListener(this);

phoneEdit = getView(R.id.et_phone);

phoneEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);// 下一步

verifyCodeEdit = getView(R.id.et_verifiCode);

verifyCodeEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);// 下一步

passwordEdit = getView(R.id.et_password);

passwordEdit.setImeOptions(EditorInfo.IME_ACTION_DONE);

passwordEdit.setImeOptions(EditorInfo.IME_ACTION_GO);

passwordEdit.setOnEditorActionListener(new OnEditorActionListener() {

@Override

public boolean onEditorAction(TextView v, int actionId,

KeyEvent event) {

// 点击虚拟键盘的done

if (actionId == EditorInfo.IME_ACTION_DONE

|| actionId == EditorInfo.IME_ACTION_GO) {

commit();

}

return false;

}

});

}

private void commit() {

String phone = phoneEdit.getText().toString().trim();

String password = passwordEdit.getText().toString().trim();

String code = verifyCodeEdit.getText().toString().trim();

if (checkInput(phone, password, code)) {

// TODO:请求服务端注册账号

}

}

private boolean checkInput(String phone, String password, String code) {

if (TextUtils.isEmpty(phone)) { // 电话号码为空

ToastUtils.showShort(this, R.string.tip_phone_can_not_be_empty);

} else {

if (!RegexUtils.checkMobile(phone)) { // 电话号码格式有误

ToastUtils.showShort(this, R.string.tip_phone_regex_not_right);

} else if (TextUtils.isEmpty(code)) { // 验证码不正确

ToastUtils.showShort(this, R.string.tip_please_input_code);

} else if (password.length() < 6 || password.length() > 32

|| TextUtils.isEmpty(password)) { // 密码格式

ToastUtils.showShort(this,

R.string.tip_please_input_6_32_password);

} else {

return true;

}

}

return false;

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_send_verifi_code:

// TODO 请求接口发送验证码

codeManager.getVerifyCode(VerifyCodeManager.REGISTER);

break;

default:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

ger.REGISTER);

break;

default:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-XBDtHU4x-1715109315855)]

[外链图片转存中…(img-3UuDl5Z6-1715109315855)]

[外链图片转存中…(img-HrcNML5n-1715109315855)]

[外链图片转存中…(img-2Nxi8wlO-1715109315856)]

[外链图片转存中…(img-9r5KWdCn-1715109315856)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值