不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的。通过唯一的键去取相对应的值, SharedPreferences可以支持多种不同的数据存储类型,存进去什么类型,取出来什么类型。个人补充:其实这种存储方式就是存储在项目中,可以直接在活动和类中调用。
1.1将数据存储到SharedPreferences中
想要使用SharedPreferences存储数据,首先获得SharedPreferences对象,Android中有3中方法用于得到SharedPreferences对象,我们这里就介绍一种方法:
就用最常用的Context类中的getSharedPreferences()方法
首先要明白这是一个静态方法(不需要 new/创建对象),此方法接收俩个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件都是存放 /data/data/<package name>/shared_prefs/目录下的。第二个参数用于指定操作模式,用MODE_PRIVATE模式就好,也可以直接传入0,效果是相同的,表示只有当前应用程序才可以对这个SharedPreferences文件进行读写。SharedPreferences文件得SharedPreferences对象之后,就可以向SharedPreferences文件中储存数据了,主要可以分为三步实现。
(1)调用SharedPreferences对象edit()方法来获取一个SharedPreferences.Editor对象。
(2)向SharedPreferences.Editor对象中添加数据,如果添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用putString方法,以此类推。
(3)调用apply()方法将添加的数据提交,从而完成数据的存储操作。
下面用代码给大家展示以下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<!--这个按钮用于点击存储数据-->
<Button
android:id="@+id/send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="存储数据"
android:layout_gravity="center_horizontal"
/>
<!--这个按钮用于点击输出已存储的数据-->
<Button
android:id="@+id/receive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="接收数据"
android:layout_gravity="center_horizontal"
/>
<!--这个文本控件用于显示输出已存储的数据-->
<TextView
android:id="@+id/display"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输出显示"
android:textSize="30sp"
/>
</LinearLayout>
效果图如下:
后端代码:
package com.example.sharedpreferencestest01;
import androidx.appcompat.app.AppCompatActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button send;
private Button receive;
private TextView display;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
send = (Button) findViewById(R.id.send);/*存储数据按钮*/
receive = (Button) findViewById(R.id.receive);/*接收输出数据按钮*/
display = (TextView) findViewById(R.id.display);/*显示输出数据按钮*/
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
* 通过getSharedPreferences()方法指定SharedPreferences文件名为data(没有则会创建),默认0
* 并得到SharedPreferences.Editor对象;
* */
SharedPreferences.Editor edit = getSharedPreferences("data", 0).edit();
/*向这个对象(edit)添加数据*/
edit.putString("姓名","张三");
edit.putInt("电话",110);
edit.putString("性别","男");
/*调用apply()方法提交,从而完成存储操作*/
edit.apply();
/*显示提交数据是否成功*/
Toast.makeText(MainActivity.this, "数据存储成功!", Toast.LENGTH_SHORT).show();
}
});
receive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
* 通过getSharedPreferences()得到SharedPreferences对象
* */
SharedPreferences data = getSharedPreferences("data", 0);
/*分别调用get+数据类型,去获取前面所存储的姓名等等,如果没有找到相对应的值,则会用方法中的默认值来代替。*/
String name = data.getString("姓名","");
int telephone = data.getInt("电话",0);
String gender = data.getString("性别", "");
/*最后将结果输出到文本框中*/
display.setText("姓名: "+name+", 性别: "+gender+", 电话: "+telephone);
}
});
}
}
效果图:
好了,简单用法就到这里了,有错误地方还请大家多多指教。