位置: 编程技术 - 正文
推荐整理分享Android——SharedPreferences实现登录界面的记住密码和自动登录功能(android shareuid),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:安卓sharedpreferences,android share,android sharedpreferences,android shared,android shareuid,android shareuserid,android share,android shared,内容如对您有帮助,希望把文章链接给更多的朋友!
2、开发概要主要功能SharedPreferences介绍,其是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将取出。
SharedPreferences数据的四种操作模式Context.MODE_PRIVATEContext.MODE_APPENDContext.MODE_WORLD_READABLEContext.MODE_WORLD_WRITEABLEContext.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入 本项目中利用的是Context.MODE_PRIVATE模式,项目运行初始化是默认的记住密码状态,当勾选自动登录的时候记住密码会自动勾选,当以记住密码的状态正确登录过一次之后,系统会记住密码,将数据信息存入Android系统,ShredPreferences中的信息以XML文件的形式保存在 /data/data/cn.edu.bzu.aminiTwitter/userInfo目录下。当系统以自动登录状态正确登录过一次之后,那么系统下一次登录就会自动调取数据进入ShowActivity.xml中。二、开发Android-SharedPreferences程序讲解1、项目文件如下:2、项目开发步骤 1、新建一个项目名字为aminiTitter,在布局文件activity_main.xml中设置文件布局,主要代码如下:
[java] view plaincopy<LinearLayout xmlns:android=" xmlns:tools=" android:id="@id/LinearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/background_login" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <RelativeLayout android:id="@id/login_div" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="dip" android:background="@drawable/background_login_div_bg" android:padding="2dp"> <TextView android:id="@id/tvUserName" style="@style/normalText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="5dp" android:text="@string/tvUserName" /> //用户名 <EditText android:id="@id/etName" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/tvUserName" android:hint="@string/tvUser_hint" android:background="@drawable/background_login_div_bg" android:inputType="text" android:singleLine="true" > </EditText> <TextView android:id="@id/tvPasswordName" style="@style/normalText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@id/etName" android:layout_below="@id/etName" android:layout_marginTop="5dp" android:text="@string/tvPasswordName" /> //密码 <EditText android:id="@id/etPassword" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@id/tvPasswordName" android:layout_below="@id/tvPasswordName" android:ems="" android:inputType="textPassword" android:background="@drawable/background_login_div_bg" android:password="true" android:singleLine="true" /> //登录事件 <Button android:id="@id/btnName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/etPassword" android:layout_below="@id/etPassword" android:layout_marginTop="dp" android:onClick="btnClick" android:background="@drawable/background_login" android:text="@string/btnName" /> //多选框布局 <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/btnName" android:layout_alignLeft="@id/etPassword" android:orientation="horizontal"> //记住密码 <CheckBox android:id="@id/cbJiYi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cdJiYi" /> //自动登录 <CheckBox android:id="@id/cbZiDongDengLu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cbZiDongDengLu" /> </LinearLayout> </RelativeLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@id/tvTiShiName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="dp" android:text="@string/tvTiShiName" android:textColor="#" android:textColorLink="#FFCC" /> <ImageView android:id="@id/dog_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:src="@drawable/dog" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@id/dog_logo" android:layout_toLeftOf="@id/dog_logo" android:paddingBottom="8dp" android:src="@drawable/bg" /> </RelativeLayout> </LinearLayout> 文本文件string.xml,代码如下:[java] view plaincopy<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">aminiTwitter</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="tvUserName">账号:</string> <string name="tvUser_hint">Email或手机号</string> <string name="tvPasswordName">密码:</string> <string name="btnName">登陆</string> <string name="tvTiShiName">没有账号?<a href="#" nce_href="#">注册</a></string> <string name="cdJiYi">记住密码</string> <string name="cbZiDongDengLu">自动登录</string> <string name="tvChengGong">登录成功!</string> <string name="btnFanHui">点击返回</string> <string name="title_activity_show">MainActivity</string> </resources>
注意: 册上可以写连接的地址。
布局文件background_login_div_bg.xml和background_login.xml文件代码部分如下:background_login_div_bg.xml:
[java] view plaincopy<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=" > <solid android:color="#FFFFFF"/> <corners android:topLeftRadius="dp" android:topRightRadius="dp" android:bottomRightRadius="dp" android:bottomLeftRadius="dp"/> </shape>background_login.xml:
[java] view plaincopy<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=" > <gradient android:startColor="#FFACDAE5" android:endColor="#FFCAE1" android:angle="" /> </shape> 2、重点来啦,主要代码在MainActivity.xml文件中,那么代码部分如下:[java] view plaincopypackage cn.edu.bzu.aminitwitter; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { private CheckBox cbJiYi; private CheckBox cbZiDongDengLu; private EditText etName,etPassword; private SharedPreferences sharedPreferences; private Button btnClick; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); findById(); //设置默认记住密码的状态 if(sharedPreferences.getBoolean("cbJiYi", true)){ cbJiYi.setChecked(true); etName.setText(sharedPreferences.getString("etName", "")); etPassword.setText(sharedPreferences.getString("etPassword", "")); } //判断自动登陆多选框的状态 if(sharedPreferences.getBoolean("cbcbZiDongDengLu", false)){ //设置默认自动登陆的状态 cbZiDongDengLu.setChecked(true); //跳转界面 Intent intent = new Intent(MainActivity.this,ShowActivity.class); startActivity(intent); } //监听自动登陆多选框事件 cbZiDongDengLu.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if(cbZiDongDengLu.isChecked()){ //勾选事件 cbJiYi.setChecked(true); sharedPreferences.edit().putBoolean("cbZiDongDengLu", true).commit(); }else{ sharedPreferences.edit().putBoolean("cbZiDongDengLu", false).commit(); } } }); } private void findById() { // TODO Auto-generated method stub cbJiYi=(CheckBox) findViewById(R.id.cbJiYi); cbZiDongDengLu=(CheckBox) findViewById(R.id.cbZiDongDengLu); etName=(EditText) findViewById(R.id.etName); etPassword=(EditText) findViewById(R.id.etPassword); btnClick=(Button) findViewById(R.id.btnName); //创建shareaPreferences对象用来存、取数据,文件名userInfo; sharedPreferences=this.getSharedPreferences("userInfo", Context.MODE_PRIVATE); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void btnClick(View view){ if(etName.getText().toString().equals("abc") && etPassword.getText().toString().equals("aaa")){ //如果选中记住密码 if(cbJiYi.isChecked()){ // sharedPreferences.edit().putBoolean("ISCHECK", true).commit(); //存入 Editor editor=sharedPreferences.edit(); editor.putString("etName", etName.getText().toString()); editor.putString("etPassword", etPassword.getText().toString()); editor.commit(); //取出 String etName=sharedPreferences.getString("etName", ""); String etPassword=sharedPreferences.getString("etPassword", ""); Log.d("MainActivity", "etName="etName"netPassword="etPassword"n"); Toast.makeText(MainActivity.this, "记住用户名和密码", Toast.LENGTH_LONG).show(); }else { //如果没选中记住密码 Toast.makeText(this, "没有记住用户名和密码", Toast.LENGTH_LONG).show(); etName.setText(""); etPassword.setText(""); // sharedPreferences.edit().putBoolean("ISCHECK", false).commit(); } Intent intent=new Intent(MainActivity.this, ShowActivity.class); startActivity(intent); //finish(); if(cbJiYi.isChecked() && cbZiDongDengLu.isChecked()){ startActivity(intent); //finish(); } }else{ Toast.makeText(MainActivity.this, "登录失败!", Toast.LENGTH_LONG).show(); } } } 主要是数据的存入和取出利用,设置多选框的默认状态的记住密码、自动登录的监听事件,默认状态是记住密码,不自动登录,在btnClick实践中判断etName、etPasswprd是否为空,然后再确定执行语句,验证密码后在确定是否执行跳转,跳转到activity_show.xml中。3、新建另一个简单的xml文件,activity_show.xml代码如下:[java] view plaincopy<RelativeLayout xmlns:android=" xmlns:tools=" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#5C" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".ShowActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@id/tvChengGong" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/tvChengGong" android:textColor="#FF7F" android:textSize="sp" /> //返回 <Button android:id="@id/btnBack" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="Recover" android:background="#FF" android:text="@string/btnFanHui" /> </LinearLayout> </RelativeLayout> 4、修改ShowActivity.java文件,代码部分如下:[java] view plaincopypackage cn.edu.bzu.aminitwitter; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; public class ShowActivity extends Activity { private Button btnBack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除标题 this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_show); btnBack=(Button) findViewById(R.id.btnBack); btnBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub //返回 finish(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.show, menu); return true; } } 5、在调试过程中注意多给Android系统加大点缓存,有利于程序的调试。这个程序其实不太成熟,比如有写代码部分没有得到有力的简化。有不好的地方希望亲抽出时间发送消息哦,在下定感激不尽!俩个时间戳相减 importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;/***俩个时间戳相减*年6月8日::*@authorcfs*/publicclasstestTime{publicstaticvoidmain(String[]args
Android4.4 wpa_supplicant深入分析之wpa_supplicant初始化流程续 下面我们将接上一篇文章继续分析main中第二个关键函数wpa_supplicant_add_iface。wpa_supplicant_add_iface用于向wpa_supplicant添加接口设备。所谓的添加(addiface),其
android AsyncTask介绍 AsyncTask和Handler对比1)AsyncTask实现的原理,和适用的优缺点AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反
上一篇:Android 本地文件读取, 数据库文件备份(Android本地文件怎么显示歌词)
下一篇:俩个时间戳相减(时间戳的差值)