走进SharedPreferences

本文详细介绍了在Android应用中如何使用SharedPreferences进行数据存储与读取。主要包括三种获取SharedPreferences对象的方法,通过实例展示了如何保存与读取字符串、整数及布尔类型的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要获取SharedPreferences的对象,这里主要有三种方法:

  • 1.Content类中的getSharedPreferences()方法 第一个参数指定文件名称,第二个指定操作模式,目前只有MODE_PRIVATE这一种类模式可选,这是默认的操作模式,和直接传入0的效果相同,表示是有当前应用能对该文件进行读写,至于其他的操作模式都被废弃了。

  • 2.Activity类中的getPreferences()方法 和getSharedPreferences()相似,不过它直接收一个操作模式参数,因为使用这个方法的时候,它默认将包名自动当作文件的名字。

  • 3.PreferenceManager类中的getDefaultShardPreference()方法 这是一个静态方法,它接收一个Context参数,并自动使用当前应用程序的包名来命名SharedPreferences文件。
    得到对象后,就可以开始传递参数了。

    (1)调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
    (2)向SharedPreferences.Editor对象中添加数据,比如putString()。
    (3)调用apply()方法将数据提交,从而完成数据操作。


    MainActivity:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button saveDate = (Button)findViewById(R.id.save_data);
        saveDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
                editor.putString("name","Tom");
                editor.putInt("age",18);
                editor.putBoolean("married",false);
                editor.apply();
            }
        });
    }
}


activity_main:

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.eason.sharedpreference.MainActivity">
    <Button
        android:id="@+id/save_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="save data"/>
</android.support.constraint.ConstraintLayout>

运行点击按钮;
打开ADM 点击File Explorer
进入datd/

这里写图片描述

将data.xml导出,
这里写图片描述

打开文件,
这里写图片描述


接下来 来获取数据:

修改activity_main:

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.eason.sharedpreference.MainActivity">
    <Button
        android:id="@+id/save_data"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:text="save data"
        tools:layout_editor_absoluteY="4dp"
        tools:layout_editor_absoluteX="8dp"/>
    <Button
        android:id="@+id/restore_data"
        android:text="Restore data "
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="8dp"
        android:layout_marginTop="47dp"
        app:layout_constraintTop_toBottomOf="@+id/save_data"
        />
</android.support.constraint.ConstraintLayout>

在MainActivity添加:

Button restoreData = (Button)findViewById(R.id.restore_data);
        restoreData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences preferences = getSharedPreferences("data",MODE_PRIVATE);
                String name = preferences.getString("name","");
                int age = preferences.getInt("age",0);
                boolean married = preferences.getBoolean("married",false);
                Log.e("Main", "onClick: "+name );
                Log.e("Main", "onClick: "+age );
                Log.e("Main", "onClick: "+married );
            }
        });
    }

效果图: 点击按钮这样就读取到了数据

这里写图片描述

继续,解下来使用PreferenceManager.getDefaultSharedPreferences()来储存获取数据。


修改MainActivity:

ublic class MainActivity extends AppCompatActivity {
    private SharedPreferences preferences;
    private SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        preferences = PreferenceManager.getDefaultSharedPreferences(this);//修改
        Button saveDate = (Button)findViewById(R.id.save_data);
        saveDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                editor = preferences.edit();
                editor.putString("name","Tom");
                editor.putInt("age",18);
                editor.putBoolean("married",false);
                editor.apply();
            }
        });
        Button restoreData = (Button)findViewById(R.id.restore_data);
        restoreData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = preferences.getString("name","");
                int age = preferences.getInt("age",0);
                boolean married = preferences.getBoolean("married",false);
                Log.e("Main", "onClick: "+name );
                Log.e("Main", "onClick: "+age );
                Log.e("Main", "onClick: "+married );
            }
        });
    }
}



同样的效果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值