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:

结尾

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

高级UI,自定义View

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
efault:

结尾

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。

想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

[外链图片转存中…(img-ayhIAdkD-1714740974266)]

高级UI,自定义View

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

[外链图片转存中…(img-HdNcxRH8-1714740974268)]

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值