【小功能1】android登录时记住和显示密码功能-阿里云开发者社区

开发者社区> 余二五> 正文

【小功能1】android登录时记住和显示密码功能

简介:
+关注继续查看

       好久没写博客了,自从进入新公司以来学到了很多知识,博客是把自己学过的知识存储并方便以后查看的好工具,最近一直在研究4.0源码,以后更多的是深入研究源码,对于应用可能写的会很少,但是无论如何每天积累点,每天都学点,刚进公司老大让写一个记事本程序,要求能够登录,我在写的时候加入了记住密码和显示密码的功能,原本想加自动登录功能,但是还是两个选项比较合适,多了不多,直接上代码。(今天时间较紧,写的很仓促)


  1. package com.gionee.android.notepad.noteactivity;  
  2.  
  3. import com.gionee.android.notepad.service.FileService;  
  4.  
  5. import android.app.Activity;  
  6. import android.app.AlertDialog;  
  7. import android.app.AlertDialog.Builder;  
  8. import android.content.DialogInterface;  
  9. import android.content.Intent;  
  10. import android.content.SharedPreferences;  
  11. import android.os.Bundle;  
  12. import android.text.Editable;  
  13. import android.text.InputType;  
  14. import android.text.TextWatcher;  
  15. import android.text.method.HideReturnsTransformationMethod;  
  16. import android.text.method.PasswordTransformationMethod;  
  17. import android.view.KeyEvent;  
  18. import android.view.View;  
  19. import android.view.View.OnClickListener;  
  20. import android.widget.ArrayAdapter;  
  21. import android.widget.AutoCompleteTextView;  
  22. import android.widget.Button;  
  23. import android.widget.CheckBox;  
  24. import android.widget.EditText;  
  25. import android.widget.Toast;  
  26.  
  27. /**   
  28.  * @author Ma Guohui  
  29.  * @FileDescription:登陆Activity  
  30.  * @version 2012-10-26 下午2:55:03  
  31.  * @ChangeList:  
  32.  */ 
  33.  
  34. public class Gn_LoginActivity extends Activity {  
  35.       
  36.     private AutoCompleteTextView mUserNameAuto;  
  37.     private EditText mPasswordEt;  
  38.     private Button mLoginBt;  
  39.     private Button mCancelBt;  
  40.     private String mUserStr;  
  41.     private String mPwdStr;  
  42.     private CheckBox mRemPwdCb;  
  43.     private CheckBox mShowpwdCb;  
  44.     private SharedPreferences mPasswordSp;  
  45.     private FileService fileService;  
  46.  
  47.     @Override 
  48.     public void onCreate(Bundle savedInstanceState) {  
  49.         super.onCreate(savedInstanceState);  
  50.         setContentView(R.layout.main);  
  51.         mUserNameAuto = (AutoCompleteTextView) findViewById(R.id.cardNumAuto);  
  52.         mPasswordEt = (EditText) findViewById(R.id.editPwd);  
  53.         mLoginBt = (Button) findViewById(R.id.button1);  
  54.         mCancelBt = (Button) findViewById(R.id.button2);  
  55.         mRemPwdCb = (CheckBox) findViewById(R.id.checkBox1);  
  56.         mShowpwdCb = (CheckBox) findViewById(R.id.checkBox2);  
  57.         fileService = new FileService(this);  
  58.           
  59.         savePassword();  
  60.           
  61.         mLoginBt.setOnClickListener(new OnClickListener() {//登陆按钮设置监听事件  
  62.  
  63.             public void onClick(View v) {  
  64.                 // FileService fileService = new FileService(this);  
  65.                 // TODO Auto-generated method stub  
  66.                 // user = username.getText().toString();  
  67.                 mUserStr = mUserNameAuto.getText().toString().trim();  
  68.                 mPwdStr = mPasswordEt.getText().toString().trim();  
  69.  
  70.                 if (fileService.login(mUserStr, mPwdStr)) {//执行登录验证操作(fieService是另一个类的实例哦)
  71.                     if (mRemPwdCb.isChecked()) {  //选择记住密码功能
  72.                         mPasswordSp.edit().putString(mUserStr, mPwdStr).commit();//记住密码,把密码信息放入SharedPreferences文件中  
  73.                     }  
  74.                     Intent intent = new Intent(Gn_LoginActivity.this,  
  75.                             MainActivity.class);  
  76.                     startActivity(intent);  //跳转到其他显示界面
  77.                     Gn_LoginActivity.this.finish();  
  78.                 } else {  //提示密码错误
  79.                     Toast.makeText(Gn_LoginActivity.this, getResources().getString(R.string.password_error),  
  80.                             Toast.LENGTH_SHORT).show();  
  81.                 }  
  82.             }  
  83.  
  84.         });  
  85.         mCancelBt.setOnClickListener(new OnClickListener() {//取消事件监听  
  86.  
  87.             @Override 
  88.             public void onClick(View v) {  
  89.                 // TODO Auto-generated method stub  
  90.                 dialog();//显示对话框  
  91.             }  
  92.         });  
  93.         mShowpwdCb.setOnClickListener(new OnClickListener() {//显示密码事件操作  
  94.             /*  
  95.              * 明文显示密码 :  
  96.              * 明文显示:android.text.method.HideReturnsTransformationMethod ;  
  97.              * 密文显示:android.text.method.PasswordTransformationMethod ;  
  98.              */ 
  99.             @Override 
  100.             public void onClick(View v) {  
  101.                 // TODO Auto-generated method stub  
  102.                 if (mShowpwdCb.isChecked()) {// 被选中,则显示明文  
  103.                     // 将文本框的内容设置成明文显示  
  104.                     mPasswordEt.setTransformationMethod(HideReturnsTransformationMethod  
  105.                             .getInstance());  
  106.                 } else {  
  107.                     // 将文本框内容设置成密文的方式显示  
  108.                     mPasswordEt.setTransformationMethod(PasswordTransformationMethod  
  109.                             .getInstance());  
  110.                 }  
  111.             }  
  112.         });  
  113.     }  
  114.  
  115.     @Override 
  116.     public boolean onKeyDown(int keyCode, KeyEvent event) {//监听返回键事件  
  117.         // TODO Auto-generated method stub  
  118.         if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
  119.             dialog();  
  120.         }  
  121.         return false;  
  122.     }  
  123.  
  124.     private void dialog() {//显示对话框方法  (退出时哦)
  125.         AlertDialog.Builder builder = new Builder(Gn_LoginActivity.this);  
  126.         builder.setMessage(this.getResources().getString(R.string.isLogout));  
  127.         builder.setTitle(this.getResources().getString(R.string.logoutPrompt));  
  128.         builder.setPositiveButton(this.getResources().getString(R.string.logout_yes), new DialogInterface.OnClickListener() {  
  129.  
  130.             @Override 
  131.             public void onClick(DialogInterface dialog, int which) {  
  132.                 // TODO Auto-generated method stub  
  133.                 dialog.dismiss();  
  134.                 Gn_LoginActivity.this.finish();  
  135.             }  
  136.  
  137.         });  
  138.         builder.setNegativeButton(this.getResources().getString(R.string.logout_no), new DialogInterface.OnClickListener() {  
  139.  
  140.             @Override 
  141.             public void onClick(DialogInterface dialog, int which) {  
  142.                 dialog.dismiss();  
  143.             }  
  144.         });  
  145.         builder.create().show();  
  146.     }  
  147.  
  148.     private void savePassword() {//保存密码方法,数据放入SharedPreferences文件  
  149.         /*  
  150.          * 参数简述:  
  151.          * Name—获得SharedPreferences之后,将会在应用程序的私有文件夹中保存着一个XML文件,第一个参数name就是这个文件名字  
  152.          * 。 Mode—XML文件的保存模式,默认为0,也就是MODE_PRIVATE  
  153.          */ 
  154.         mPasswordSp = this.getSharedPreferences("passwordFile", MODE_PRIVATE);  
  155.         mRemPwdCb.setChecked(true);// 默认为记住密码  
  156.         mUserNameAuto.setThreshold(1);// 输入1个字母就开始自动提示  
  157.         // 隐藏密码为InputType.TYPE_TEXT_VARIATION_PASSWORD,也就是0x81  
  158.         // 显示密码为InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD,也就是0x91  
  159.         mPasswordEt.setInputType(InputType.TYPE_CLASS_TEXT  
  160.                 | InputType.TYPE_TEXT_VARIATION_PASSWORD);  
  161.         mUserNameAuto.addTextChangedListener(new TextWatcher() {  
  162.  
  163.             @Override 
  164.             public void onTextChanged(CharSequence s, int start, int before,  
  165.                     int count) {  
  166.                 // TODO Auto-generated method stub  
  167.                 String[] allUserName = new String[mPasswordSp.getAll().size()];// sp.getAll().size()返回的是有多少个键值对  
  168.                 allUserName = mPasswordSp.getAll().keySet().toArray(new String[0]);  
  169.                 ArrayAdapter<String> adapter = new ArrayAdapter<String>(  
  170.                         Gn_LoginActivity.this,  
  171.                         android.R.layout.simple_dropdown_item_1line,  
  172.                         allUserName);  
  173.                 mUserNameAuto.setAdapter(adapter);// 设置数据适配器  
  174.             }  
  175.  
  176.             @Override 
  177.             public void beforeTextChanged(CharSequence s, int start, int count,  
  178.                     int after) {  
  179.                 // TODO Auto-generated method stub  
  180.  
  181.             }  
  182.  
  183.             @Override 
  184.             public void afterTextChanged(Editable s) {  
  185.                 // TODO Auto-generated method stub  
  186.                 // 自动输入密码  
  187.                 mPasswordEt.setText(mPasswordSp.getString(mUserNameAuto.getText().toString(),  
  188.                         ""));  
  189.  
  190.             }  
  191.         });  
  192.     }  
  193. }  

布局文件内容


  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent" 
  5.     android:orientation="vertical" > 
  6.  
  7.     <TextView 
  8.         android:layout_width="fill_parent" 
  9.         android:layout_height="wrap_content" 
  10.         android:text="@string/username" /> 
  11.     <AutoCompleteTextView   
  12.         android:id="@+id/cardNumAuto"   
  13.         android:layout_width="fill_parent"   
  14.         android:layout_height="wrap_content" >    
  15.     </AutoCompleteTextView>    
  16.       
  17.       
  18.     <TextView 
  19.         android:layout_width="fill_parent" 
  20.         android:layout_height="wrap_content" 
  21.         android:text="@string/password" /> 
  22.     <EditText 
  23.         android:id="@+id/editPwd" 
  24.         android:layout_width="match_parent" 
  25.         android:layout_height="wrap_content" 
  26.         android:ems="10" 
  27.         android:inputType="textPassword" > 
  28.  
  29.         <requestFocus /> 
  30.     </EditText> 
  31.  
  32.       
  33.     <LinearLayout android:id="@+id/LinearLayout01" 
  34.         android:layout_width="fill_parent" 
  35.         android:layout_height="wrap_content"   
  36.         android:gravity="center"> 
  37.          <CheckBox 
  38.         android:id="@+id/checkBox1" 
  39.         android:layout_width="wrap_content" 
  40.         android:layout_height="wrap_content" 
  41.         android:text="@string/rempwd" /> 
  42.  
  43.         <CheckBox 
  44.         android:id="@+id/checkBox2" 
  45.         android:layout_width="wrap_content" 
  46.         android:layout_height="wrap_content" 
  47.         android:text="@string/showpwd" /> 
  48.            </LinearLayout> 
  49.     <LinearLayout android:id="@+id/LinearLayout01" 
  50.         android:layout_width="fill_parent" 
  51.         android:layout_height="wrap_content"   
  52.         android:gravity="center"> 
  53.          <Button 
  54.         android:id="@+id/button1" 
  55.         android:layout_width="wrap_content" 
  56.         android:layout_height="wrap_content" 
  57.         android:text="登陆" /> 
  58.  
  59.     <Button 
  60.         android:id="@+id/button2" 
  61.         android:layout_width="wrap_content" 
  62.         android:layout_height="wrap_content" 
  63.         android:text="取消" /> 
  64.            </LinearLayout> 
  65. </LinearLayout> 

运行效果图(没图说个JB)

 

 

 










本文转自 646676684 51CTO博客,原文链接:http://blog.51cto.com/2402766/1073431,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQLServer删除登录记录用户名和密码
原文:SQLServer删除登录记录用户名和密码 介绍: 作为一名开发人员都会知道我们做的项目都要用到数据库,数据库都需要账号和密码,然而问题来了,做的东西多了那些没用的账号和密码还在哪里纠缠着我们。
1385 0
广播的最佳实践——实现强制下线功能(Android_Broadcast)
 关键词:Broadcast, 生命周期,继承 本项目基本思路: 1.先创建一个ActivityCollector类用于管理所有的活动; 2.然后创建一个BaseActivity类作为所有活动的父类: 父类功能有二: 其一,用于辅助统筹管理本项目的所有活动。
593 0
【我的Android进阶之旅】TortoiseSVN 客户端 如何重置用户名和密码?
在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了。
924 0
Spring Security笔记:使用BCrypt算法加密存储登录密码
在前一节使用数据库进行用户认证(form login using database)里,我们学习了如何把“登录帐号、密码”存储在db中,但是密码都是明文存储的,显然不太讲究。这一节将学习如何使用spring security3新加入的bcrypt算法,将登录加密存储到db中,并正常通过验证。
1621 0
I.MX6 Android 移除 Settings wifi功能
/********************************************************************* * I.MX6 Android 移除 Settings wifi功能 * 说明: * 本文主要记录如何修改Android Settings中的主选项,初衷是有些 * 设置并不是我们需要,隐藏掉还是比较好的。
737 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载