如何在Android共享首选项中使用apply()方法及示例?


在深入了解共享首选项的apply()方法之前,我们应该了解Android中的共享首选项是什么。使用共享首选项,我们可以以键值对的形式存储或检索值。共享首选项中共有五种不同的方法,如下所示:

  • Edit() - 用于编辑共享首选项的值

  • commit() - 将共享首选项的值提交到xml文件

  • apply() - 将编辑器中的更改提交回共享首选项。

  • remove(String key) - 使用键从共享首选项中删除键值对。

  • Put() - 将键值对添加到共享首选项xml。

共享首选项的示例语法如下所示:

final SharedPreferences sharedPreferences=getSharedPreferences("USER",MODE_PRIVATE);

在上述语法中,我们创建了一个名为USER.xml的共享首选项文件,并且它是私有模式,这意味着其他应用程序无法访问此共享首选项。

在共享首选项中使用Apply方法:

apply() 将立即写入内存存储,并安排异步写入持久性存储。

下面的示例演示了如何在Android共享首选项中使用apply()方法及示例。

步骤1 - 在Android Studio中创建一个新项目,转到文件 ⇒ 新建项目,并填写所有必需的详细信息以创建新项目。

步骤2 - 将以下代码添加到res/layout/activity_main.xml。

<?xml version="1.0" encoding="utf-8"?>
<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"
   android:orientation="vertical"
   tools:context=".MainActivity"
   tools:layout_editor_absoluteY="81dp">

   <EditText
      android:id="@+id/name"
      android:layout_width="match_parent"
      android:layout_height="60dp"
      android:layout_marginTop="8dp"
      android:autofillHints=""
      android:hint="NAME"
      app:layout_constraintTop_toTopOf="parent"
      tools:layout_editor_absoluteX="0dp" />

   <EditText
      android:id="@+id/address"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="84dp"
      android:hint="Phone Number"
      android:importantForAutofill="no"
      android:inputType=""
      app:layout_constraintTop_toTopOf="@+id/name"
      tools:layout_editor_absoluteX="16dp"
      tools:targetApi="o" />

   <Button
      android:id="@+id/button"
      android:layout_width="108dp"
      android:layout_height="wrap_content"
      android:layout_marginStart="8dp"
      android:layout_marginLeft="8dp"
      android:layout_marginTop="120dp"
      android:layout_marginEnd="8dp"
      android:layout_marginRight="8dp"
      android:gravity="center_horizontal"
      android:text="Save"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintHorizontal_bias="0.503"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="@+id/address" />

   <Button
      android:id="@+id/read"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginStart="8dp"
      android:layout_marginLeft="8dp"
      android:layout_marginTop="88dp"
      android:layout_marginEnd="8dp"
      android:layout_marginRight="8dp"
      android:gravity="center_horizontal"
      android:text="read"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="@+id/button" />

   <TextView
      android:id="@+id/result"
      android:layout_width="wrap_content"
      android:layout_height="0dp"
      android:layout_marginStart="8dp"
      android:layout_marginLeft="8dp"
      android:layout_marginTop="184dp"
      android:layout_marginEnd="8dp"
      android:layout_marginRight="8dp"
      android:text="result"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="@+id/button" />
</android.support.constraint.ConstraintLayout>

在上面的xml中,它包含两个用于姓名和地址的EditText,当用户点击保存按钮时,它将值存储在共享首选项中;当用户点击读取按钮时,它将从共享首选项中读取值。

步骤3 - 将以下代码添加到src/MainActivity.java

package package com.example.andy.myapplication;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      final SharedPreferences sharedPreferences=getSharedPreferences("USER",MODE_PRIVATE);
      final EditText name=findViewById(R.id.name);
      final EditText address=findViewById(R.id.address);
      final TextView result=findViewById(R.id.result);
      Button save=findViewById(R.id.button);
      Button read=findViewById(R.id.read);
      read.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            result.setText("Name is "+sharedPreferences.getString("Name","No name")+" Address "+   sharedPreferences.getString("Address","No Address"));
         }
      });
      save.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            if(name.getText().toString().isEmpty() && address.getText().toString().isEmpty()){
               Toast.makeText(MainActivity.this,"Plz Enter all the data",Toast.LENGTH_LONG).show();
            }else{
               String nameData=name.getText().toString().trim();
               String addressData=address.getText().toString().trim();
               SharedPreferences.Editor editor=sharedPreferences.edit();
               editor.putString("Name",nameData);
               editor.putString("Address",addressData);
               editor.apply();
            }
         }
      });
   }
}

步骤4 - 无需更改manifest.xml。让我们尝试运行您的应用程序。我假设您已将您的实际Android移动设备连接到您的计算机。要从Android Studio运行应用程序,请打开您的项目活动文件之一,然后单击运行  工具栏中的图标。选择您的移动设备作为选项,然后检查您的移动设备,它将显示您的默认屏幕:

在上面的示例中,我们添加了姓名和地址,然后单击保存按钮。

在上面的示例中,我们单击了读取按钮。它会将文本添加到TextView。

点击 这里 下载项目代码

更新于:2019年7月30日

414 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告