商业级项目登录模块源码分析

来源:互联网 发布:周杰伦侯佩岑 知乎 编辑:程序博客网 时间:2024/06/05 11:14

从Git上搞到了一份13年的开源商业级项目源码,经过研究发现里面的代码可读性极高,而且编写规范、用类典雅、逻辑清晰、注释充分,是个可以用来参考学习的好项目。

因此贴出这段验证登录信息并登陆的代码,Review一下:

    private EditText etAccount;// 帐号    private EditText etPassword;//密码    private CheckBox cbSavedpw;//是否保存密码//...................中间省略N行........./** * 执行登录操作 */private void doLongin() {name = etAccount.getText().toString().trim();if (name.equals(userFormat)) {name = username;     } if (!MatchUtil.isLicitAccount(name)) { if ("".equals(name)) { Toast.makeText(this, R.string.null_account, 0).show(); } else if (name.length() < 3) { Toast.makeText(this, R.string.short_account, 0).show(); } else {Toast.makeText(this, R.string.error_account, 0).show(); } return;}/*上面这段是登录按钮的执行逻辑,使用了getText().toString().trim()方法获取了一个String字符串,并且trim()方法自动去除了输入信息两边的空白内容接下来把登录信息放入if{}逻辑中进行比对,检测了用户名过短或为空值等等的问题*/               // 验证密码final String loginPasWord = etPassword.getText().toString().trim();if (!MatchUtil.isLicitPassword(loginPasWord)) {if ("".equals(loginPasWord)) {Toast.makeText(this, R.string.null_password, 0).show();} else if (loginPasWord.length() < 6) {Toast.makeText(this, R.string.short_password, 0).show();} else {Toast.makeText(this, R.string.error_password, 0).show();}return;}//同上一段,这次是验证密码               HttpDatas datas = new HttpDatas(Constant.USERAPI);datas.putParam("method", "login");datas.putParam("username", name);datas.putParam("pwd",Md5Util.md5Diagest(loginPasWord, 16));NetUtils.sendRequest(datas, LoginActivity.this, getString(R.string.login_now), new TaskCallBack() {//把账号密码封装到HttpDatas中,此处使用了经典的Md5加密方法,把密码字段加密了                   @Overridepublic int excueHttpResponse(String strResponds) {System.out.println(strResponds);int code = 0;JSONObject jsonObject = JSONUtil.instaceJsonObject(strResponds);if (jsonObject != null) {try {code = jsonObject.getInt("code");} catch (JSONException e1) {e1.printStackTrace();}}if (code == 2000) {user = JSONUtil.jsonObject2Bean(jsonObject, UserInfo.class);if (cbSavedpw.isChecked()) {SharedPreferences sp = LoginActivity.getOrSharedPrefences(LoginActivity.this);Editor editor = sp.edit();editor.putBoolean(Constant.ISSAVEPW, true);editor.putString(Constant.USERNAME, name);editor.putString(Constant.PASSWORD, AESUtil.hexEncrypt(loginPasWord, Constant.ENCODEPASSWORD));editor.commit();editor.clear();}return Constant.STATAS_OK;}return code;}/*发送Json请求验证账号密码正确性,中间有一段使用了Editor把账号信息添加进了SharedPreference缓存里,注意这里十分严谨的用到了AES加密算法,具体方法:<span style="color:#FF0000;">AESUtil.hexEncrypt</span>(参数)*/
@Overridepublic void beforeTask() {}@Overridepublic void afterTask(int result) {System.out.println(result);switch (result) {case Constant.STATAS_OK:Toast.makeText(getApplicationContext(), LoginActivity.this.getString(R.string.login_success), 0).show();Intent intent = new Intent(LoginActivity.this, MainActivity.class);intent.putExtra("User", user);startActivity(intent);break;// case 5000:// Toast.makeText(getApplicationContext(),// getString(R.string.error_pw_or_user), 0).show();// break;case 4004:Toast.makeText(getApplicationContext(), getString(R.string.error_pw_or_user), 0).show();break;default:showResulttoast(result, LoginActivity.this);break;}}<pre name="code" class="java">                 });

/*
Task 完成时接收调用方提供的状态信息并以异步方式执行的延续任务。
所以afterTask指的就是接下来的新任务,意思就是该切换页面咯
作者先Syso了一下result,然后以result结果来建立switch/case逻辑,
我们看到,只有当全局变量是Constant.STATAS_OK时,先弹出登陆成功的Toast,然后立刻运行了转换到新页面的逻辑,在这里是转换到MainActivity;
同时我们还要注意,他在开始执行这个intent之前,用putExtra方法携带了一个数据User到下个界面,显然下个页面肯定要重新确认一下这个User值知否完备,
来确保整个登录程序的健壮性
*/

}


接下来是一段MainAcitivty文件的开头部分,我们通过这段代码来验证刚才的分析是否正确

private UserInfo user;public UserInfo getUser() {return user;}public Handler handler = new Handler();
@Overrideprotected void onCreate(Bundle arg0) {super.onCreate(arg0);setContentView(R.layout.activity_main);Intent intent = getIntent();Serializable serializable = intent.getSerializableExtra("User");if (serializable != null) {user = (UserInfo) serializable;OrongApplication.user = user;}initView();

/*

果然出现了一个if逻辑,他用serializable序列化器验证了user,接下来才运行initView()方法,

也就是说如果if语句通不过,整个程序就会报错,多么神奇的排列顺序微笑

*/




分析完毕~

0 0
原创粉丝点击