Android中5中数据存储:SharedPreference存储、文件存储、SQLite数据库存储、ContentProvider存储和网络存储。
一、SharedPreferences存储
在android中想要实现配置信息的保存则需要使用该SharedPreferences完成。
该存储器保存信息是按照“Key=Value”的形式进行保存的。它只能保存一些基本的数据类型,如字符串、整型、布尔型等。
SharedPreferences存储特点:
1.是一种轻型的数据存储方式(android自带的)
2.本质是基于XML文件存储key-value键值对数据
3.通常用来存储一些简单的配置信息(很少,所以没有必要采用数据库),(保存密码,用户名等)
如何使用,它只可以取数据而不可以存储和修改,存储修改是通过Editor对象实现。
实现SharedPreferences存储的步骤如下:
1.获得SharedPreferences对象
2.获得SharedPreferences.Editor对象
3.通过Editor接口的putXxx方法保存key-value对其中Xxx表示不同的数据类型
4.通过Editor接口的commit方法保存key-value对
SharedPreferences接口的常用方法
//1.public abstract SharedPreferences.Editor edit() 普通类型 使其处于可编辑的状态
//2.public abstract boolean contains(String key) 普通类型 判断某一个key是否存在
//3.public abstract Map<String,?> getAll() 普通类型 取出全部数据
//4.public abstract boolean getBoolean(String key,boolean defValue) 普通类型 取出boolean型数据,并指定默认值
//5.public abstract float getFloat(String key,float defValue) 普通类型 取出float型数据,并指定默认值
//6.public abstract int getInt(String key,int defValue) 普通类型 取出int型数据,并指定默认值
//7.public abstract long getIong(String key,long defValue) 普通类型 取出long型数据,并指定默认值
//8.public abstract String getString(String key,String defValue) 普通类型 取出String型数据,并指定默认值
我们在进行数据的写入时,首先要通过 SharedPreferences类所提供的edit()方法使其处于可编辑的状态,方法返回的对象类型是android.content.SharedPreferences.Editor接口实例,该接口的常用方法如下:
//1.public abstract SharedPreferences.Editor clear() 普通类型 清除所有的数据
//2.public abstract boolean commit() 普通类型 提交更新的数据
//3.public abstract SharedPreferences.Editor putBoolean(String key,boolean value) 普通类型 保存一个boolean型数据
//4.public abstract SharedPreferences.Editor putFloat(String key,float value) 普通类型 保存一个float型数据
//5.public abstract SharedPreferences.Editor putInt(String key,Int value) 普通类型 保存一个int型数据
//6.public abstract SharedPreferences.Editor putLong(String key,long value) 普通类型 保存一个long型数据
//7.public abstract SharedPreferences.Editor putString(String key,String value) 普通类型 保存一个String型数据
//8.public abstract SharedPreferences.Editor remove(String key) 普通类型 删除指定key的数据
由于SharedPreferences和SharedPreferences.Editor两个都是接口,要想取得SharedPreferences接口的实例化对象,还需要Activity类中的几个常量和方法的支持。如下所示:
Activity类对SharedPreferences接口的支持
1.public static final int MODE_PRIVATE 常量 创建的文件只能被一个应用程序调用,或者被具有相同的ID的应用程序访问
2.public static final int MODE_WORLD_READABLE 常量 允许其他应用程序读取文件
3.public static final int MODE_WORLD_WRITEABLE 常量 允许其他应用程序修改文件
4.public SharedPreferences getSharedPreferences(String name,int mode) 普通类型 指定保存操作的文件名称,同 时指定操作的模式,设置的内容可以是0、MODE_PRIVATE 、MODE_WORLD_READABLE 、MODE_WORLD_WRITEABLE
下面来练习一个例子:向文件中保存两种数据:String和int 型。
package com.administrator.sharedpreferencestest;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
/**
* Created by Administrator on 2016/3/23.
*/
public class SavedDataActivity extends Activity{
private static final String FILENAME="HelloWorld";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//指定操作的文件名称和指定操作的模式
SharedPreferences share=super.getSharedPreferences(FILENAME, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor=share.edit();//编辑文件
editor.putString("author","qinshihuang");
editor.putInt("age",2275);
editor.commit();
}
}
利用getSharedPreferences()方法取得
SharedPreferences对象,利用此对象取得SharedPreferences.Editor接口的对象进行数据的设置,最后commit提交。
让我们来再写一个例子,在这个里面我们获取信息
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
逻辑代码:
package com.administrator.sharedpreferencestest;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.TextView;
/**
* Created by Administrator on 2016/3/23.
*/
public class LoadDataActivity extends Activity {
private static final String FILENAME="EMPEROR";
private TextView tv1;
private TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loaddata);
tv1= (TextView) findViewById(R.id.tv1);
tv2= (TextView) findViewById(R.id.tv2);
SharedPreferences share=super.getSharedPreferences(FILENAME,Activity.MODE_PRIVATE);
tv1.setText("皇帝:"+share.getString("emperor","秦始皇"));
tv2.setText("年龄:"+share.getInt("age",2275));
}
}
效果如下: