Android实现手机内存存储功能
效果图
点击存入,点击获取 吐司结果
写入数据
读取数据
源码
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方法。