安卓实战之登录界面设计


运行环境:

windows10+ Android Studio2.3.3 +API 21

(适用android 5.0以上版本的手机)


(1)知识储备

(知识储备链接:https://blog.csdn.net/biggerchong/article/details/83015407)

Activity:表示当前手机的整个界面(一页)

OnCreate( ): 当页面被创建时被activity回调,方法中常加入初始化实现

onStart( ):当页面显示时被activity回调

onRestart( ):重新启动activity时被回调,总是在onStart()之后执行

onPause( ):快速暂停activity

onResume( ):当Activity由暂停状态恢复为活动状态时被回调

onStop( ):当页面被隐藏时被activity回调

onDestory( ):销毁activity时被回调

Intentactivity之间跳转的桥梁,直接通过putExtra( )传递/回传数据;还可以利用Bundle先对有用的数据加工,

再利用putExtra(               )传递数据。(Bundle对象可以包含所有putEextra()传递的数据)

            (注:Activity和Intent具体可查阅android官方文档https://developer.android.google.cn/guide/components/intents-filters

Mob短信验证码:http://wiki.mob.com/sdk-sms-android-3-0-0/ 官方文档教学,主要用到mob自身封装的回调机制

(注意在清单xml中添加相应的权限,不然是收不到短信验证信息的)

Mysql数据库:目前Android版本强制规定用线程来使用数据库(增删改查等),防止界面线程被卡死。

(数据库的连接操作将在服务器部署部分详细讲解)


(2)项目流程


(3)界面设计

             主界面                             登录界面

注册界面                                  设置密码


(4)响应设计

1、点击登录图标:

//点击登陆ImageButton imBtn_login=(ImageButton)findViewById(R.id.imBtn_login);imBtn_login.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){//页面跳转,并请求获取数据Intent intent= new Intent(MainActivity.this,LoginActivity.class);startActivityForResult(intent,REQUESTMAIN);  //会进行回调得到想要的数据}});

2、取回指定的数据:

  //通过重写onActivityResult来取回数据@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data){// 是否 REQ_GET_INPUT 的返回if (requestCode == REQUESTMAIN&&resultCode == 103){// 从intent中取出数据user.userID= data.getStringExtra("userID");user.userName= data.getStringExtra("userName");user.userPwd= data.getStringExtra("userPwd");user.userPhone=data.getStringExtra("userID");user.status=Boolean.valueOf(data.getStringExtra("status"));}if (requestCode == REQUESTMAIN&&resultCode == 104){// 从intent中取出数据user.userPwd= data.getStringExtra("loginPwd");user.userPhone=data.getStringExtra("loginPhone");TextView userName=(TextView)findViewById(R.id.textView_mainName);userName.setText(user.userPhone);TextViewmainGrade=(TextView)findViewById(R.id.textView_mainGrade);mainGrade.setText(user.userPwd);}}

说明:

整套登录界面的总体流程大致就是按照这样一套模式来进行的,注意的是在注册完毕并且设置密码完成后页面将会按需返回,意思就是activity都存在一个栈中,创建的时候在压栈;销毁的时候在抛栈。当设置密码完毕后此界面就会自动回调onDestory( )来销毁该界面并返回到注册界面,但是这里我设置成界面不显示但数据还在往会传,当数据从注册界面传回到登录界面后,利用再销毁注册界面(只需要一个finish( )就可以了,使当前界面不显示,数据传输完毕自动或人为销毁界面)

3、优化方案:

i、采用MD5对密码加密

原理介绍:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。填充方法:在消息后面进行填充,填充第一位为1,其余为0。

(链接:http://libin52008.blog.163.com/blog/static/105327187201186981459/)

网上这种东西大部分都是你抄我,我抄你参考价值不高;这里只是简单的介绍,然后copy代码;有兴趣可以专攻哟!(网络海洋庞大,知识无穷无尽,你懂的!)

(还可以使用(AES+base64+PBE)更加高级安全的方法来加密,不过操作起来稍微复杂一些,这里就使用java自带的MD5来加密解密)

import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/*** 采用MD5加密解密*/public class MyTest {private static final String TAG = "MD5Util";/**** MD5加码 生成32位md5码*/public static String string2MD5(String inStr) {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();return "";}char[] charArray = inStr.toCharArray();byte[] byteArray = new byte[charArray.length];for (int i = 0; i < charArray.length; i++)byteArray[i] = (byte) charArray[i];byte[] md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16)hexValue.append("0");hexValue.append(Integer.toHexString(val));}return hexValue.toString();}/*** 加密解密算法 执行一次加密,两次解密*/public static String convertMD5(String inStr) {char[] a = inStr.toCharArray();for (int i = 0; i < a.length; i++) {a[i] = (char) (a[i] ^ 't');}String s = new String(a);return s;}// 测试主函数public static void main(String args[]){String s = new String("shenchong");System.out.println("原始:" + s+s.le);System.out.println("MD5后:" + string2MD5(s));System.out.println("加密的:" + convertMD5(s));System.out.println("解密的:" + convertMD5(convertMD5(s))+ convertMD5(convertMD5(s)).length());}}

ii、实现延时自动登录

SharePreferneces官方介绍:https://developer.android.google.cn/reference/android/content/SharedPreferences)

// 保存当前用户信息,以便下一次开机启动时加载SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPref.edit();editor.putString("username", username);editor.putString("password", password);editor.commit();// 从配置里加载SharedPreferences sharedPref = getPreferences(Context.MODE_PRIVATE);String username = sharedPref.getString("username", "");String password = sharedPref.getString("password", "");if(username.length() >0 && password.length() > 0){// 自动填写用户名和密码((EditText) findViewById(R.id.id_username)).setText(username);((EditText) findViewById(R.id.id_password)).setText(password);// 延时N毫秒后自动登录autoLogin();}//延时登录Handler msgHandler = new Handler();// 延时后自动登录private void autoLogin(){msgHandler.postDelayed(new Runnable(){@Overridepublic void run(){doLogin(null);}}, 1500);}

iii、防止sql注入(字符转义)

password=password.replace(" ' ", " /' ");

password=password.replace(" ` ", " /` ");

利用replace()函数将String进行转义,避免MySql中` 与 ' 这些特殊字符的出现而非法进入用户信息。


(5)问题总结和完善

设计中最开始对activity跳转流程模糊导致走了很多弯路,开发过程中现有一个清晰的模块流程感,不然很难有序高效的开发。本次Login模块的开发可以拓展到很多新的知识,最关键的提高个人对activity与Intent的理解与使用,懂得什么时候activity被创建、被销毁、被启动等。

登录设计模块源码以上传github:https://github.com/SCAsMessi/JavaStudy/tree/master/CSDN/Android%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/LoginDesign/ForeignShopping

加油!欢迎评论,一起进步!

安卓实战之登录界面设计相关推荐

  1. Android之登录界面设计

    Android之登录界面设计 这篇文章主要讲述Android开发中常用的APP开发界面–登录界面的开发(由于博主是初学安卓,可能有些小伙伴会感到简陋,我会继续努力学习新知识的,大家一起加油). (1) ...

  2. 登录界面设计及功能实现

    文章目录 1 登录界面设计 1.1 登录界面设计 1.2 登录界面设计要点 1 登录界面设计 1.1 登录界面设计 界面效果如下: 1.2 登录界面设计要点 我们需要先将窗体设置为无边框,然后再设置窗 ...

  3. web登录界面设计_出色的Web界面设计的7条规则

    web登录界面设计 When you work on a website or on the design of web pages, remember that their success is n ...

  4. 舒服的网页登录界面设计灵感

    登录注册就是"一扇门",一扇让产品和用户真正互通的门,让产品可以给用户体现出更多价值的门. 所以这个门一定要: 够宽.门槛够低.一直开着.记忆每次进出- 设计师交流社区 集设网 w ...

  5. UI设计使用模板素材|登录界面设计

    登陆注册界面在咱们APP UI设计过程当中最有可能是最先接触到的东西,因为现在对于绝大部分的APP来说都有,形式也都差不多,估计大家认为设计出来的东西也都差不多,或者没有花精力去设计. 怎样让登录界面 ...

  6. 15个华丽的扁平风格的登录界面设计示例

    对于任何网站来说,登录界面都是最重要的页面之一.这个页面的设计也在不断的进化,设计师会充分利用最新的技术和流行设计优势应用到登录界面的设计中.过去的2013年,扁平化设计成为非常受欢迎的设计风格,你绝 ...

  7. 请你根据微信登录界面设计测试用例

    请你根据微信登录界面设计测试用例 参考回答: 一.功能测试 1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录. 2.输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息. 3. ...

  8. 浅析网站 APP 登录界面设计

    无论网页或是移动APP的设计,很重要的一点是如何能在小而美和功能复杂性之间找到平衡点.本文就移动APP表单设计进行浅析,看设计师是如何在设计与交互体验之间做到小而美的平衡. 一.极致的减法 这是一个异 ...

  9. pyqt5登录界面设计——模仿qq登录界面,可登录注册(数据库)

    pyqt5登录界面设计--模仿qq登录界面 一.简单易用的可直接登录的界面--账号密码程序写死 1.1.效果图: 1.2.视频效果图 3.代码说明 4.使用示例 5.全部源码见: 二.带数据库的可登录 ...

  10. Android程序登录界面设计

    刚刚学习Android开发,现在工作需要开发一个app的演示程序,首先就是要开发一个登录界面了.在网上找了很多材料,最后参考了博客中的登录界面设计方法: blog.csdn.net/StayFooli ...

最新文章

  1. 【JavaEE】WebService到底是什么?
  2. 20170908校内训练
  3. access2003的使用
  4. javascript学习系列(18):数组中的include方法
  5. c++ 不能分配给为0的数组_【嵌入式C】你有想过quot;数组下标quot;为何从0开始吗?...
  6. [转载] 将整数k转换成实数python表达式_Python程序设计课后习题答案-第一单元
  7. Ucenter实现多个网站同步登录
  8. IDEA 不检查语法错误问题
  9. python3之微信文章爬虫
  10. 算法设计与分析——排序算法:比较排序算法的下界
  11. 关于重启服务器后wordpress打不开问题
  12. 即时通讯软件安全问题分析
  13. 游戏辅助制作核心--植物大战僵尸逆向之天上下钻石(五)
  14. 大话重构连载11:小步快跑是这样玩的
  15. 双底形态识别又又又升级了!这次叠加了突破当日涨幅判断!
  16. Linux0.11内核源码解析-setup.s
  17. GithubDesktop桌面版汉化+教程
  18. 【Kotlin基础系列】第7章 类与对象(2)--- 继承
  19. C语法关于数组的运用
  20. LilyPond教程(4)——钢琴独奏片段 II

热门文章

  1. 计算机如何连接wifi台式,无线网卡怎么连接台式电脑_台式机添加无线网的方法...
  2. 处理url时服务器发生错误,请和系统管理员联系,服务器处理URL时出错。请与系统管理员联系的解决方案...
  3. php清除手机浏览器缓存,js清除浏览器缓存的几种方法
  4. 01【计算机基础、Java概述】
  5. 普法Android.mk中的一些宏和Android.bp对应关系
  6. 海王夺回王位科学深意:杂种是怎么一步步主宰地球的
  7. c++ 获取文件夹文件并排序
  8. 10个屌炸天的设计网址导航带你嗨翻科技设计界 #精选前端开发设计素材
  9. 服务器无线网络禁用启用无效,无线网络卡一直被禁用,无法启用
  10. 贝尔商道赚钱思维36道第04道:二八定律,约仅有20%的因素影响80%的结果