案例一:在主活动中直接使用:
package com.example.mytests.activities;
import com.example.mytests.R;
import com.example.mytests.viewModels.MyData;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
public class SharePreferenceTest extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share_preference_test);
//SharedPreferences data=getPreferences(MODE_PRIVATE);//未命名的方式,会对应生成相应activity的xml文件,为该活动所单独使用
SharedPreferences data=getSharedPreferences("Mydata",MODE_PRIVATE);//方式二,带名字的存储,会对应生成该名字的xml存储文件
SharedPreferences.Editor editor=data.edit();//使用时申请一个编辑器
editor.putString("hello","你好哇");//通过editor.put来写入数据
editor.apply();//操作完毕后记得editor.apply()应用数据操作
String str=data.getString("hello","none");//通过sharePreferences对象.get来获取存储的值
Log.d("输出:", "onCreate: "+str);
}
}
运行后存储可通过根目录/data/data/对应包名/share_prefs访问到:
可以看到生成了对应名字的文件;
点开发现已写入。
案例二:在外部引入,正规的写法:
创建你的MyData类,构造函数传入context
package com.example.mytests.viewModels;
import com.example.mytests.R;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
public class MyData {
private Context mContext;
private SharedPreferences mData;
private SharedPreferences.Editor mEditor;
public MyData(Context context) {
mContext=context;
}
public void save(String str){
String name=mContext.getResources().getString(R.string.My_data);
mData=mContext.getSharedPreferences(name,Context.MODE_PRIVATE);
mEditor=mData.edit();
mEditor.putString(mContext.getResources().getString(R.string.string_name),str);
mEditor.apply();
}
public void load(){
String str=mData.getString(mContext.getResources().getString(R.string.string_name),"none");
Log.d("输出", "load: "+str);
}
}
在你对应的活动中实例化:
这里传入context时需注意不能用this,必要的是getApplicationContext()全局变量,以防数据泄露,因为传入this时,在活动生命周期结束时,该data对象可能还存在。
package com.example.mytests.activities;
import com.example.mytests.R;
import com.example.mytests.viewModels.MyData;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class SharePreferenceTest extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share_preference_test);
MyData data=new MyData(getApplicationContext());//这里不能用this,会造成数据的泄漏,应使用*全局变量getApplicatioinContext
data.save("1000");
data.load();
}
}