效果图
点击存入,点击获取 吐司结果
写入数据
读取数据
源码
AddDataTestActivity
package com.gaojc.activity; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.gaojc.text.R; import com.gaojc.text.Utils.LogUtil; import com.gaojc.text.Utils.SharedPreferencesUtil; public class AddDataTestActivity extends AppCompatActivity { // 需要存入的数据(这里为了方便,所以使用假数据) private final static String CODE = "ABC666"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_data_test); /** * 存入数据 */ findViewById(R.id.saveData).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SharedPreferencesUtil.getInstance(AddDataTestActivity.this).putString("code",CODE); } }); /** * 获取数据 */ findViewById(R.id.getData).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String code = SharedPreferencesUtil.getInstance(AddDataTestActivity.this).getString("code"); Toast.makeText(AddDataTestActivity.this,"code:" + code,Toast.LENGTH_LONG).show(); LogUtil.e("code:" + code); } }); } }
activity_add_data_test.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout 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" tools:context="com.gaojc.activity.AddDataTestActivity"> <Button android:id="@+id/saveData" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="存入" android:layout_gravity="left"/> <Button android:id="@+id/getData" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取" android:layout_gravity="right"/> </FrameLayout>
SharedPreferencesUtil
package com.gaojc.text.Utils; import android.content.Context; import android.content.SharedPreferences; import android.text.TextUtils; public class SharedPreferencesUtil { private static SharedPreferences mSharedPreferences; //保存数据接口 private static SharedPreferences.Editor mEditor; //Editor对象用来写入数据 private static SharedPreferencesUtil mSharedPreferencesUtil; // 构造方法 public SharedPreferencesUtil(Context context) { /** * context.getSharedPreferences:获取SharedPreferences实例 * Context.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读写 */ mSharedPreferences = context.getSharedPreferences("config", Context.MODE_PRIVATE); // 获取Editor对象 mEditor = mSharedPreferences.edit(); } // 单例模式 public static SharedPreferencesUtil getInstance(Context context) { if (mSharedPreferencesUtil == null) { mSharedPreferencesUtil = new SharedPreferencesUtil(context); } return mSharedPreferencesUtil; } // 存入数据 public void putString(String key, String value) { if (TextUtils.isEmpty(value)) { value = ""; } // apply():提交 mEditor.putString(key, value).apply(); } // 获取数据 public String getString(String key) { return mSharedPreferences.getString(key, ""); } }
Log打印日志类(LogUtil)
---------------------------------
SharedPreferences.Editor的commit()方法和apply()方法的区别
Android存储(SharedPreferences.Editor)commit()和apply()区别:
commit和apply虽然都是原子性操作,但是原子的操作不同,commit是原子提交到数据库,从提交数据到存在磁盘中都是同步过程;
而apply方法的原子操作是原子提交到内存中,而非数据库,之后再异步提交数据到数据库中。
commit提交是同步过程,效率会比apply异步提交的速度慢,有返回值;apply没有返回值,无法知道存储是否失败。
在不关心提交结果是否成功的情况下,优先考虑apply方法。