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


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


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


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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 利用SharedPreferences可以方便地保存数据,它是Android的一个轻量级存储类。下面是使用SharedPreferences保存数据的步骤: 1. 首先,获取SharedPreferences对象SharedPreferences sharedPreferences = getSharedPreferences("data", Context.MODE_PRIVATE); 这里的"data"是文件名,可以根据需要自定义。 2. 在SharedPreferences对象,我们可以使用Editor对象来进行数据的编辑和保存SharedPreferences.Editor editor = sharedPreferences.edit(); 3. 使用Editor对象进行数据的编辑和保存,可以向其添加键值对: editor.putString("name", "John"); // 保存字符串类型数据 editor.putInt("age", 25); // 保存整型数据 editor.putBoolean("isMale", true); // 保存布尔类型数据 在这里,"name"、"age"和"isMale"是键名,可以根据需求自定义。分别保存了字符串类型、整型和布尔类型的数据。 4. 完成数据的编辑后,需要通过commit()方法将数据保存SharedPreferences文件: editor.commit(); 5. 当需要从SharedPreferences读取数据时,可以通过键名获取保存数据: String name = sharedPreferences.getString("name", ""); // 获取字符串类型数据,第二个参数是默认值 int age = sharedPreferences.getInt("age", 0); // 获取整型数据,第二个参数是默认值 boolean isMale = sharedPreferences.getBoolean("isMale", false); // 获取布尔类型数据,第二个参数是默认值 以上就是利用SharedPreferences保存数据的基本步骤。SharedPreferences可以用于保存用户的配置信息、用户登录状态等数据,方便快捷地进行读取和修改。 ### 回答2: SharedPreferences是一种用于Android开发的轻量级数据存储方式。它以键值对的形式来存储数据,并且数据可以被多个组件和应用程序共享使用。我们可以使用SharedPreferences保存一些简单的数据,比如用户偏好设置、登录状态、应用程序状态等。 首先,我们需要通过Context对象获取SharedPreferences对象。然后,我们可以使用SharedPreferences对象的edit()方法来获取一个Editor对象,通过Editor对象来写入数据。最后,我们要记得调用commit()方法提交数据的修改。 下面是一个保存数据SharedPreferences的例子: ```java // 获取SharedPreferences对象 SharedPreferences sharedPreferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); // 获取Editor对象 SharedPreferences.Editor editor = sharedPreferences.edit(); // 写入数据 editor.putString("username", "John"); editor.putInt("age", 25); editor.putBoolean("loggedIn", true); // 提交修改 editor.commit(); ``` 在这个例子,我们创建了一个名为"MyPreferences"的SharedPreferences对象,并通过Editor对象数据进行了写入操作。我们分别保存了一个用户名、一个年龄和一个登录状态。 我们可以使用getString()、getInt()、getBoolean()等方法来读取保存SharedPreferences数据。下面是一个读取数据的例子: ```java // 获取SharedPreferences对象 SharedPreferences sharedPreferences = getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); // 读取数据 String username = sharedPreferences.getString("username", ""); int age = sharedPreferences.getInt("age", 0); boolean loggedIn = sharedPreferences.getBoolean("loggedIn", false); ``` 在这个例子,我们调用了getString()、getInt()、getBoolean()等方法来读取保存SharedPreferences数据,并将数据保存在对应的变量。 总的来说,利用SharedPreferences保存数据是一种简单而方便的方式。它适用于存储一些简单的应用程序状态或用户偏好设置等数据,但如果需要存储大量的结构化数据,可能不太适合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值