用户登录之SharedPreferences保存用户名
2016-09-09 13:28
197 查看
Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即:
1.文件存储
2.SharedPreference存储(首选项存储) // 用户可以按照自己的喜好来更改界面风格,操作习惯,常用列表等数据信息,通常把这些信息叫做首选项信息,这些信息基本都是以键值对(key-value)的形式来存储的。
3.数据库存储
对于用户名这种超轻量级数据,SharedPreference存储再适合不过。
至于SharedPreference的用法这里不过多介绍,来看看他在实例应用的用法吧。
①创建xml文件进行界面布局(这里只是简单地demo,布局很随意~~)
activity_loading.xml
②Main_Activity.java实现记住账号这个功能
单机登录之后就可以将key和value的值存储在首选项的信息数据文件中,这个文件的目录是“/data/data/<package_name>/share_prefs”下可以下载下来看看看内容。
1.文件存储
2.SharedPreference存储(首选项存储) // 用户可以按照自己的喜好来更改界面风格,操作习惯,常用列表等数据信息,通常把这些信息叫做首选项信息,这些信息基本都是以键值对(key-value)的形式来存储的。
3.数据库存储
对于用户名这种超轻量级数据,SharedPreference存储再适合不过。
至于SharedPreference的用法这里不过多介绍,来看看他在实例应用的用法吧。
①创建xml文件进行界面布局(这里只是简单地demo,布局很随意~~)
activity_loading.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="用户名:" android:id="@+id/textView" android:layout_alignBottom="@+id/editUserName" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editUserName" android:layout_gravity="right" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/textView2" android:layout_toEndOf="@+id/textView2" android:layout_marginTop="42dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="密 码:" android:id="@+id/textView2" android:layout_marginTop="71dp" android:layout_below="@+id/textView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:id="@+id/editUserPassword" android:layout_gravity="center_horizontal" android:layout_alignTop="@+id/textView2" android:layout_toRightOf="@+id/textView2" android:layout_toEndOf="@+id/textView2" /> <Button android:onClick="doClick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录" android:id="@+id/btnLogin" android:layout_alignTop="@+id/btnRegister" android:layout_alignLeft="@+id/checkBox" android:layout_alignStart="@+id/checkBox" /> <Button android:onClick="doClick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="注册" android:id="@+id/btnRegister" android:layout_marginRight="53dp" android:layout_marginEnd="53dp" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="记住用户名" android:id="@+id/checkBox" android:checked="false" android:layout_above="@+id/btnLogin" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> </RelativeLayout>
②Main_Activity.java实现记住账号这个功能
package com.example.loading;
import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { EditText editUserName,editUserPassword; Button btnLogin,btnRegister; SharedPreferences pref; SharedPreferences.Editor editor; CheckBox checkBox; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loading); //默认 // SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); //自定义 // SharedPreferences pref = getSharedPreferences("myPref",MODE_PRIVATE); // //得到编辑器对象 // SharedPreferences.Editor editor = pref.edit(); // editor.putString("name","张三"); // editor.commit(); editUserName = (EditText) findViewById(R.id.editUserName); editUserPassword = (EditText) findViewById(R.id.editUserPassword); btnLogin = (Button) findViewById(R.id.btnLogin); btnRegister = (Button) findViewById(R.id.btnRegister); checkBox = (CheckBox) findViewById(R.id.checkBox); //实例化SharedPreferences对象 指定MODE_PRIVATE模式还有MODE_WORLD_READABLE MODE_WORLD_WRITEABLE模式 pref = getSharedPreferences("UserInfo",MODE_PRIVATE); //启用edit()获取实例 editor = pref.edit(); //第一个参数为取到的用户名名字,第二个参数为第一个参数的默认值 String name = pref.getString("editUserName",null); //如果取到的name为空(第一次启动程序或者没有点记住用户名)单选框false状态,用户名的文本框为空 // 否则true并将取到的name写入用户名的文本框 if (name == null){ checkBox.setChecked(false); } else { checkBox.setChecked(true); //把值放进去 editUserName.setText(name); } } // 两个按钮的点击事件 public void doClick(View view){ switch (view.getId()){ //如果点击了登录按钮 case R.id.btnLogin: //取出用户名和密码,trim()是去掉前后的空格 String userName = editUserName.getText().toString().trim(); String userPassword= editUserPassword.getText().toString().trim(); // Log.i("test",userName); // Log.i("test",userPassword); if("admin".equals(userName) && "123456".equals(userPassword)){ //如果单选框被选中,则将取到的用户名存到editUserName(用户名文本框) // 否则移除文本框的内容 if (checkBox.isChecked()){ editor.putString("editUserName",userName);//这是一个键值对 //注意提交 editor.commit(); }else{ editor.remove("editUserName"); //注意提交 editor.commit(); } Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this,"账号/密码错误,登录失败",Toast.LENGTH_LONG).show(); } break; default: break; } } }
单机登录之后就可以将key和value的值存储在首选项的信息数据文件中,这个文件的目录是“/data/data/<package_name>/share_prefs”下可以下载下来看看看内容。
相关文章推荐
- 使用js来获取cookie的值的方法
- angularjs “坑” 小结
- validate针对checkbox、radio、select标签的验证
- mysqli_fetch_assoc与mysqli_result::fetch_assoc区别
- MVC中使用jquery uploadify上传图片报302错误
- React Native开发环境配置
- 深入理解 AngularJS 的 Scope
- jquery-1.10.2.min.js等放到web project中报错
- CSS 颜色代码大全
- jQuery的post()和serialize()方法。
- node-haystack Episode 1: What is it and why
- JavaScript跨域总结与解决办法
- 【小白】javascript中的“文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖”
- 为什么要用 Node.js
- 解决JScrollPane水平滚动条不显示的问题
- 再谈CSS预处理器
- 关于three.js目录文件的解读,每个文件代表的意思解读
- openwrt中的luci界面采用JavaScript回调uci接口函数
- JavaScript : DOM文档解析详解
- javascript函数节流