案例一:在主活動中直接使用:
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()洗掉某個資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/308886.html
標籤:其他
