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=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访问到:

Android SharedPreferences的使用案例

 可以看到生成了对应名字的文件;

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=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();
    }
}
上一篇:丢三落四:企业上云却忘记了云安全


下一篇:《C++ 开发从入门到精通》——1.2 开发工具——Visual C++