java|Android SharedPreferences的使用案例

【java|Android SharedPreferences的使用案例】
案例一:在主活动中直接使用:

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=https://www.it610.com/article/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访问到:
java|Android SharedPreferences的使用案例
文章图片

可以看到生成了对应名字的文件;
java|Android SharedPreferences的使用案例
文章图片

点开发现已写入。

案例二:在外部引入,正规的写法:
创建你的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=https://www.it610.com/article/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=https://www.it610.com/article/new MyData(getApplicationContext()); //这里不能用this,会造成数据的泄漏,应使用顶级全局变量getApplicatioinContext data.save("1000"); data.load(); } }


此外,涉及的修改操作可通过editor.put...(...).commit()来提交修改,
清除操作可通过editor.clear().commit()清空。
删除操作可通过editor.remove(键名).commit()删除某个数据。



    推荐阅读