Android入门--SharedPreferences使用总结
2015-04-26 19:42
363 查看
Sharedperferences数据存储是Android系统的一种数据存储方式,这里简单介绍下Android系统的数据存储方式,Android系统提供了4中数据存储方式:
Sharedperferences :该存储方式适用于简单的数据保存,如配置属性,保存用户名等具有配置性质的数据存储,保存的数据是xml格式文件,通过键值对来获取和存储数据,不适合数据量较大的保存方式;
文件存储(File):文件存储方式是较常见的保存数据的方式,可以保存较大的数据,而且文件存储既能把数据保存在系统内存中,也能保存在SD卡中
数据库存储(SQLite): Android系统提供的SQLite轻量级数据库,完全支持SQL语句,数据库存储也能保存较大数据,可以保存在系统内存或者SD卡中,数据库存储可以保存具有一定规范的数据,非常高效,但是相应的需要数据库操作规范,相对前两者较复杂
网络存储(NetWork):通过网络将数据存储在服务器端,需要网络编程相关技能,一般适用于从服务器获取数据或者将本地用户信息上传到服务器端
接下来详细说明Sharedperferences的一些使用方法:
如前面介绍所说,Sharedperferences主要用于保存一些配置属性和保存用户名密码用于自动登录,其保存的数据是xml格式文件,文件路径为:/data/data/package name/shared_prefs
获取SharedPreferences的两种方式:
1 调用Context对象的getSharedPreferences()方法
2 调用Activity对象的getPreferences()方法
两种方式的区别:
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.
需要注意的是,Sharedperferences中数据的获取一般是在Activity中的onCreate()方法中,因为一般是在程序初始化的时候调用配置信息或者用户名和密码。
SharedPreferences的四种操作模式:
Context.MODE_PRIVATE : 值为 0
Context.MODE_APPEND : 值为 32768
Context.MODE_WORLD_READABLE : 值为 1
Context.MODE_WORLD_WRITEABLE : 值为 2
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
下面总结Sharedperferences的使用流程:
获取Sharedperferences对象,如上所述的两种方式获取Sharedperferences对象,根据具体的情况使用,这里假设使用第一中方式获取,使用getSharedPreferences(String name,int mode);第一个参数是要获取的文件名称(不带后缀),第二个参数是操作模式,可以写名称常量,也可以直接写常量对应的值。
读取数据。调用getString(String key,String defValue)等方法获取键值对的内容,第二个参数是在没有找到对应的第一个参数的值时返回的值,即缺省值。
保存数据:创建Editor类的对象用于获取SharedPreferences对象的edit()方法,然后调用putString(String key,String value)方法存放数据,最后要记得执行Editor类的对象的commit()方法提交对数据的修改,否则修改是无效的
以上,Sharedperferences的相关概念和使用方法都总结了,接下来是实例代码:
main.xml是布局文件,这里的布局是一个简单的登录界面
SharedPreferencesActivity.java 主要逻辑结构在这里
。。。就不上图了
Sharedperferences :该存储方式适用于简单的数据保存,如配置属性,保存用户名等具有配置性质的数据存储,保存的数据是xml格式文件,通过键值对来获取和存储数据,不适合数据量较大的保存方式;
文件存储(File):文件存储方式是较常见的保存数据的方式,可以保存较大的数据,而且文件存储既能把数据保存在系统内存中,也能保存在SD卡中
数据库存储(SQLite): Android系统提供的SQLite轻量级数据库,完全支持SQL语句,数据库存储也能保存较大数据,可以保存在系统内存或者SD卡中,数据库存储可以保存具有一定规范的数据,非常高效,但是相应的需要数据库操作规范,相对前两者较复杂
网络存储(NetWork):通过网络将数据存储在服务器端,需要网络编程相关技能,一般适用于从服务器获取数据或者将本地用户信息上传到服务器端
接下来详细说明Sharedperferences的一些使用方法:
如前面介绍所说,Sharedperferences主要用于保存一些配置属性和保存用户名密码用于自动登录,其保存的数据是xml格式文件,文件路径为:/data/data/package name/shared_prefs
获取SharedPreferences的两种方式:
1 调用Context对象的getSharedPreferences()方法
2 调用Activity对象的getPreferences()方法
两种方式的区别:
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他组件共享.
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.
需要注意的是,Sharedperferences中数据的获取一般是在Activity中的onCreate()方法中,因为一般是在程序初始化的时候调用配置信息或者用户名和密码。
SharedPreferences的四种操作模式:
Context.MODE_PRIVATE : 值为 0
Context.MODE_APPEND : 值为 32768
Context.MODE_WORLD_READABLE : 值为 1
Context.MODE_WORLD_WRITEABLE : 值为 2
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
下面总结Sharedperferences的使用流程:
获取Sharedperferences对象,如上所述的两种方式获取Sharedperferences对象,根据具体的情况使用,这里假设使用第一中方式获取,使用getSharedPreferences(String name,int mode);第一个参数是要获取的文件名称(不带后缀),第二个参数是操作模式,可以写名称常量,也可以直接写常量对应的值。
读取数据。调用getString(String key,String defValue)等方法获取键值对的内容,第二个参数是在没有找到对应的第一个参数的值时返回的值,即缺省值。
保存数据:创建Editor类的对象用于获取SharedPreferences对象的edit()方法,然后调用putString(String key,String value)方法存放数据,最后要记得执行Editor类的对象的commit()方法提交对数据的修改,否则修改是无效的
以上,Sharedperferences的相关概念和使用方法都总结了,接下来是实例代码:
main.xml是布局文件,这里的布局是一个简单的登录界面
[code]<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/user" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="用户名:" android:textSize="25sp" /> <TextView android:id="@+id/pwd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/user" android:layout_marginTop="5dp" android:text="密 码:" android:textSize="25sp" /> <EditText android:id="@+id/editUser" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@id/user" /> <EditText android:id="@+id/editPwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/editUser" android:layout_toRightOf="@id/pwd" /> <CheckBox android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@id/pwd" android:layout_marginTop="19dp" /> <Button android:id="@+id/Login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/check" android:layout_marginRight="26dp" android:layout_marginTop="15dp" android:onClick="doClick" android:text="登陆" /> <TextView android:id="@+id/i_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@id/check" android:layout_alignBottom="@id/check" android:layout_marginLeft="18dp" android:layout_toRightOf="@id/check" android:text="是否选中" android:textSize="20sp" /> <Button android:id="@+id/unpass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@id/Login" android:layout_alignBottom="@id/Login" android:layout_alignParentRight="true" android:layout_marginRight="28dp" android:text="取消" /> </RelativeLayout>
SharedPreferencesActivity.java 主要逻辑结构在这里
[code]package hlju.edu.SharedPreferences; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; public class SharedPreferencesActivity extends Activity { private EditText editUser, editPwd; private CheckBox check; private SharedPreferences sharePre; private Editor editor; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 初始化控件 editUser = (EditText) findViewById(R.id.editUser); editPwd = (EditText) findViewById(R.id.editPwd); check=(CheckBox) findViewById(R.id.check); // 获取sharedPreferences实例,创建main.xml文件用于保存数据 // 文件路径为data/data/hlju.edu.SharedPreferences/shared_prefs/main.xml // 操作模式是默认模式 sharePre = getSharedPreferences("main", MODE_PRIVATE); // 获取sharedPreferences实例的编辑类对象,用于对数据的修改 editor = sharePre.edit(); // 读取main.xml文件中 键 为“userName”的数据值,缺省值为“” // 注:这里的缺省值为“” 而非为null,所以下面的判断条件不能为if(nameString==null) String nameString = sharePre.getString("uesrName", ""); if (nameString == "") { // 如果度读取到的userName 的值为 “”,就将控件check设置为“没有选中”状态 check.setChecked(false); } else { // 如果读取到了userName 的值的不为“”,就将check设置为“选中”状态,并在编辑框中显示出值 check.setChecked(true); editUser.setText(nameString); } } // 按钮的点击事件 public void doClick(View v) { switch (v.getId()) { // 如果点击的是登录按钮 case R.id.Login: // 就获取到输入的用户名和密码,分别赋值给nameString 和 pwdString String nameString = editUser.getText().toString().trim(); String pwdString = editPwd.getText().toString().trim(); // 如果用户名和密码都输入正确 if ("admin".equals(nameString) && "123456".equals(pwdString)) { // 如果check是“选中”状态 if (check.isChecked()) { // 就存入一个键值对 键是 “userName” 值是 nameString editor.putString("uesrName", nameString); // 这里存储完成要记得调用其commit方法,用于提交 editor.commit(); } else { // 如果check是“没有选中”状态,就将键值对 “userName”移除 editor.remove("uesrName"); editor.commit(); } Toast.makeText(SharedPreferencesActivity.this, "登陆成功", Toast.LENGTH_LONG).show(); } else { Toast.makeText(SharedPreferencesActivity.this, "登陆失败", Toast.LENGTH_LONG).show(); } break; default: break; } } }
。。。就不上图了
相关文章推荐
- Android入门--ListView使用总结
- Android入门--ViewPager使用总结
- Android入门--WebView使用总结
- Android入门--Fragment使用总结
- Android入门教程四十七之RecycleView的使用总结
- Android 总结:AS入门,性能优化,性能专项测试,分析工具的使用
- Android程序入口以及项目文件夹的含义和使用总结—入门
- Android入门——多线程的使用之实时监测查看Wi-Fi信息及Wi-Fi相关的操作总结
- Android面试宝典总结--第一章:Android入门
- 使用SpringMvc开发Android WebService接口入门教程
- Android开发——ListView使用技巧总结(一)
- Android开发——ListView使用技巧总结(一)
- Android开发——ListView使用技巧总结(二)
- Android开发——ListView使用技巧总结(二)
- Android命名空间的使用总结
- Android中关于日期时间与时区的使用总结
- [Android开发] EventBus3 使用方法教程总结
- [Android开发] ButterKnife8.5.1 使用方法教程总结
- Android xposed hook使用总结
- Android混合开发之WebView使用总结