//基本操作:
1、初始化:
方法一:(默认文件名)
SharedPreferences data=getPreferences(MODE_PRIVATE);//未命名的方式,会对应生成相应activity的xml文件,为该活动所单独使用
方法二:
SharedPreferences data=getSharedPreferences("Mydata",MODE_PRIVATE);//方式二,带名字的存储,会对应生成该名字的xml存储文件
eidtor:
eidtor=data.edit();
2、添加:
editor.putString("hello","你好哇");//通过editor.put来写入数据
editor.putInt("NUM",233);
editor.apply();//操作完毕后记得editor.apply()或editor.commit()应用数据操作
3、删除:
editor.remove(键名).commit();
editor.clear().commit();//清空所有
4、修改:
editor.putString("hello","你好哇!!!!");//再次使用相同键名时为修改
editor.commit();
5、查询:
data.getString(键名,"");//""为缺省值
data.getInt(键名,0);//0为缺省值
案例一:在主活动中直接使用:
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();
}
}
此外,涉及的修改操作可通过editor.put...(...).commit()来提交修改,
清除操作可通过editor.clear().commit()清空。
删除操作可通过editor.remove(键名).commit()删除某个数据。