当前位置: 首页>移动开发>正文

Sharedpreference 保存item 利用sharedpreferences保存数据

        在程序的运行过程中,我们往往需要保存一定的数据,以便程序在其他场合可以调取这些数据,例如:Activity的状态信息,两个Activity共享的某些数据等。我们暂且把这种功能叫做数据持久化,意如其名,用于相对持久地保存应用程序的数据。

        Android有四种保存应用程序数据的方式:

        1. SharedPreferences

        2. File

        3. SQLite

        4. Content Provider

        本文主要讲解SharedPreferences的基本用法。

        SharedPreferences是Android提供的保存简单的应用程序数据的类,它通过<键,值>对的方式来保存数据,也就是为需要保存的数据指定一个键,通过检索键找到数据,从而对数据进行读写。<键,值>对保存到一个XML文件中。当需要保存多个数据时,就定义多个键,分别存储。

        SharedPreferences是一种轻量级的存储类,用于保存Activity的状态,或者一些简单的数据。下面通过一个例子来学习SharedPreferences的使用方法。

        示例:建立两个Activity,一个使用SharedPreferences写入键值对,另外一个使用SharedPreferences读取这个键值对,从而实现两个Activity之间的数据共享。

        1. 使用Eclipse创建一个Android项目,命名为MyTest_SharedPreferences。

        2. 在/res/layout文件夹下,修改activity_main.xml文件,添加一个编辑框和一个按钮,编辑框用于输入需要保存的内容,单击按钮会将文本框中的内容保存下来,并跳转到读取数据的Activity。activity_main.xml的代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <!-- 编辑框控件,id为txtString -->
    <EditText 
        android:id="@+id/txtString"			
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    
    <!-- 按钮控件,id为btnSave,点击后触发onSave方法  -->
    <Button
        android:id="@+id/btnSave"			
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Save"
        android:onClick="onSave"/>		

</LinearLayout>

        3. 在MainActivity.java中添加如下内容:

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	//点击按钮触发onSave方法,将文本框中的内容以键值对的方式写入MyTest_SharedPreferences。xml中
	public void onSave(View view){
		//创建一个SharedPreferences对象appPrefs,关联的xml文件为MyTest_SharedPreferences.xml
		//MODE_PRIVATE表示只有创建的应用程序能够打开此文件
		SharedPreferences appPrefs = 
				getSharedPreferences("MyTest_SharedPreferences",MODE_PRIVATE);
		
		//创建一个Editor对象,用于向xml文件中写数据
		SharedPreferences.Editor prefsEditor = appPrefs.edit();	
		
		//获取EditText控件中的文本,保存在str中
		String str = ((EditText)findViewById(R.id.txtString)).getText().toString();
		
		//使用putString函数,将键值对<SavedData,str>写入xml文件
		prefsEditor.putString("SavedData", str);
		
		//通过commit方法提交数据,保存完毕
		prefsEditor.commit();
		
		//跳转到ReadActivity
		startActivity(new Intent("ReadActivity"));
	}
}

        使用SharedPreferences保存数据的步骤是:

        (1)创建SharedPreferences对象:SharedPreferences SP对象名= getSharedPreferences(xml文件名,操作模式);

        (2)创建Editor对象:SharedPreferences.Editor SP_E对象名= SP对象名.edit();

        (3)使用Editor的putString方法写入键值对:SP_E对象名.purString(键, 值);

        (4)使用Editor的commit方法提交数据:SP_E对象名.commit();

        用于保存键值对的xml文件保存在/data/data/shared_prefs文件夹下,其定义了应用程序指定的键和对应的值,想要查看此xml文件,需要有root权限。

       4. 下面创建读取数据的Activity,首先在/res/layout文件夹下新建一个xml文件,命名为readdata.xml,并添加如下内容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <!-- 用于显示读取数据的文本框,id为txtString2 -->
    <EditText 
        android:id="@+id/txtString2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    
    <!-- 按钮控件,id为btnRead,点击后触发onRead方法 -->
    <Button
        android:id="@+id/btnRead"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Read"
        android:onClick="onRead"/>"

</LinearLayout>

       5. 在src文件夹中添加一个类,命名为ReadActivity,并添加如下代码:

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class ReadActivity extends Activity{
	public void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.readdata);
	}
	
	//点击按钮触发onRead方法,将指定的键值对读取出来,并显示在文本框中
	public void onRead(View view){
		//创建一个SharedPreferences对象appPrefs,关联的文件为MyTest_SharedPreferences.xml
		//MODE_PRIVATE表示只有创建的应用程序能够打开此文件
		SharedPreferences appPrefs = 
				getSharedPreferences("MyTest_SharedPreferences",MODE_PRIVATE);
		
		//将键为SavedData对应的值提取出来,并保存在str中
		String str = appPrefs.getString("SavedData", "");
		
		//定义一个EditText对象et,并使之与id为txtString2的EditText控件关联
		EditText et = (EditText)findViewById(R.id.txtString2);
		
		//将str的内容显示在et上
		et.setText(str);
	}
}

        使用SharedPreferences读取数据的步骤是:

        (1)创建SharedPreferences对象:SharedPreferences SP对象名= getSharedPreferences(xml文件名,操作模式);

        (2)使用getString方法读取指定键的值:SP对象名.getString(键,"");

        6. 两个Activity都已经写好,下面在AndroidManifest.xml中添加ReadActivity类的条目:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mytest_sharedpreferences"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.mytest_sharedpreferences.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity 
            android:label="Read Activity"
            android:name=".ReadActivity">
            <intent-filter >
                <action android:name="ReadActivity"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

        7. 调试应用程序,进入应用后,在文本框中输入字符串,例如:“需要保存的数据”,如下图所示:

Sharedpreference 保存item 利用sharedpreferences保存数据,Sharedpreference 保存item 利用sharedpreferences保存数据_SharedPreferences,第1张

        8. 点击Save按钮,进入ReadActivity界面,如下图所示:

Sharedpreference 保存item 利用sharedpreferences保存数据,Sharedpreference 保存item 利用sharedpreferences保存数据_SharedPreferences_02,第2张

        9. 点击Read,读取上一个Activity保存的数据,并显示在文本框中,如下图所示:

Sharedpreference 保存item 利用sharedpreferences保存数据,Sharedpreference 保存item 利用sharedpreferences保存数据_数据_03,第3张

        SharedPreferences的使用相对简单,在需要保存数据的地方添加写入的代码,在需要读取数据的时候添加读取的代码即可,但是SharedPreferences适用于保存简单的数据,如果需要保存的数据量大,结构复杂,则需要考虑文件、数据库等其他数据保存方式。


https://www.xamrdz.com/mobile/4qy1923143.html

相关文章: