Android 简明教程
Android - Shared Preferences
Android 提供了多种存储应用程序数据的途径。其中一种途径称为共享首选项。共享首选项允许您以键值对的形式保存和检索数据。
Android provides many ways of storing data of an application. One of this way is called Shared Preferences. Shared Preferences allow you to save and retrieve data in the form of key,value pair.
为了使用共享首选项,您必须调用一个名为 getSharedPreferences() 的方法,该方法返回一个 SharedPreference 实例,指向包含首选项值的文件。
In order to use shared preferences, you have to call a method getSharedPreferences() that returns a SharedPreference instance pointing to the file that contains the values of preferences.
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
第一个参数是键,第二个参数是 MODE。除了 private 以外,还有其他可用的模式,如下所列 −
The first parameter is the key and the second parameter is the MODE. Apart from private there are other modes available that are listed below −
Sr.No |
Mode & description |
1 |
MODE_APPEND This will append the new preferences with the already existing preferences |
2 |
MODE_ENABLE_WRITE_AHEAD_LOGGING Database open flag. When it is set , it would enable write ahead logging by default |
3 |
MODE_MULTI_PROCESS This method will check for modification of preferences even if the sharedpreference instance has already been loaded |
4 |
MODE_PRIVATE By setting this mode, the file can only be accessed using calling application |
5 |
MODE_WORLD_READABLE This mode allow other application to read the preferences |
6 |
MODE_WORLD_WRITEABLE This mode allow other application to write the preferences |
您可以使用 SharedPreferences.Editor 类在 sharedpreferences 中保存一些东西。您将调用 SharedPreference 实例的 edit 方法,并在 editor 对象中接收它。它的语法是 −
You can save something in the sharedpreferences by using SharedPreferences.Editor class. You will call the edit method of SharedPreference instance and will receive it in an editor object. Its syntax is −
Editor editor = sharedpreferences.edit();
editor.putString("key", "value");
editor.commit();
除了 putString 方法之外,编辑器类中还提供了一些方法,允许操作共享首选项中的数据。它们列示如下 −
Apart from the putString method , there are methods available in the editor class that allows manipulation of data inside shared preferences. They are listed as follows −
Sr. NO |
Mode & description |
1 |
apply() It is an abstract method. It will commit your changes back from editor to the sharedPreference object you are calling |
2 |
clear() It will remove all values from the editor |
3 |
remove(String key) It will remove the value whose key has been passed as a parameter |
4 |
putLong(String key, long value) It will save a long value in a preference editor |
5 |
putInt(String key, int value) It will save a integer value in a preference editor |
6 |
putFloat(String key, float value) It will save a float value in a preference editor |
Example
此示例演示了使用共享首选项。它显示一个带有某些文本字段的屏幕,其值在应用程序关闭后保存,并在再次打开应用程序时取回。
This example demonstrates the use of the Shared Preferences. It display a screen with some text fields, whose value are saved when the application is closed and brought back when it is opened again.
要尝试此示例,您需要按照以下步骤开发应用程序后在实际设备上运行它 −
To experiment with this example, you need to run this on an actual device on after developing the application according to the steps below −
Steps |
Description |
1 |
You will use Android studio to create an Android application under a package com.example.sairamkrishna.myapplication. |
2 |
Modify src/MainActivity.java file to add progress code to display the spinning progress dialog. |
3 |
Modify res/layout/activity_main.xml file to add respective XML code. |
4 |
Run the application and choose a running android device and install the application on it and verify the results. |
以下是修改后的内容 MainActivity.java.
Following is the content of the modified MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText ed1,ed2,ed3;
Button b1;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String Name = "nameKey";
public static final String Phone = "phoneKey";
public static final String Email = "emailKey";
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed1=(EditText)findViewById(R.id.editText);
ed2=(EditText)findViewById(R.id.editText2);
ed3=(EditText)findViewById(R.id.editText3);
b1=(Button)findViewById(R.id.button);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String n = ed1.getText().toString();
String ph = ed2.getText().toString();
String e = ed3.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Name, n);
editor.putString(Phone, ph);
editor.putString(Email, e);
editor.commit();
Toast.makeText(MainActivity.this,"Thanks",Toast.LENGTH_LONG).show();
}
});
}
}
以下是修改后的主活动文件 res/layout/activiy_main.xml. 的内容
Following is the content of the modified main activity file*res/layout/activiy_main.xml.*
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Shared Preference "
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="35dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials Point"
android:id="@+id/textView2"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:textSize="35dp"
android:textColor="#ff16ff01" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_below="@+id/textView2"
android:layout_marginTop="67dp"
android:hint="Name"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_below="@+id/editText"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:hint="Pass" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText3"
android:layout_below="@+id/editText2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:hint="Email" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:id="@+id/button"
android:layout_below="@+id/editText3"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp" />
</RelativeLayout>
以下是修改后的文件内容 res/values/strings.xml.
Following is the content of the modified content of file res/values/strings.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
以下是默认文件内容 AndroidManifest.xml.
Following is the content default file AndroidManifest.xml.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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>
</application>
</manifest>
让我们尝试运行你的应用程序。我假设你已将你的实际 Android 移动设备与你的计算机连接。要从 Android Studio 运行应用程序,请打开一个项目活动文件,然后从工具栏中单击“运行”图标。在启动应用程序之前,Android Studio 将显示以下窗口,用于选择希望在其中运行 Android 应用程序的选项。
Let’s try to run your application. I assume you have connected your actual Android Mobile device with your computer. To run the app from Android studio, open one of your project’s activity files and click Run icon from the toolbar. Before starting your application, Android studio will display following window to select an option where you want to run your Android application.
选择你的移动设备作为选项,然后检查你的移动设备,它将显示以下屏幕 −
Select your mobile device as an option and then check your mobile device which will display following screen −
现在,只需在字段中输入一些文本。例如,我输入了一些随机名称和其他信息,然后单击“保存”按钮。
Now just put in some text in the field. Like i put some random name and other information and click on save button.
现在,当你按下保存按钮后,文本将保存在共享首选项中。现在,请按后退按钮并退出应用程序。现在再次打开它,你将看到你已在应用程序中写回的所有文本。
Now when you press save button, the text will be saved in the shared preferences. Now press back button and exit the application. Now open it again and you will see all the text you have written back in your application.