我正在尝试在带有片段..的视图模型中存储一些共享的首选项。然后,当我关闭应用程序并重新打开它时,我想在某些活动中将其打印出来,但是无法打印!
这是我的代码:
我的片段:
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentSettingsBinding binding = DataBindingUtil.inflate(
inflater, R.layout.fragment_settings, container, false);
SettingsViewModel settingsViewModel = new ViewModelProvider(this, new SettingsViewModelFactory(this, new SettingsModel())).get(SettingsViewModel.class);
binding.setSettings(settingsViewModel);
binding.setLifecycleOwner(this);
binding.languageSetting.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
settingsViewModel.languageSetting.setValue(binding.languageSetting.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
binding.currencySetting.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
settingsViewModel.currencySetting.setValue(binding.currencySetting.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
return binding.getRoot();
}
视图模型:
public void onSaveClick() {
String masterKeyAlias = null;
try {
masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);
sharedPreferences = EncryptedSharedPreferences.create(
"shared_prefs",
masterKeyAlias,
context,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// use the shared preferences and editor as you normally would
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("languageSetting", languageSetting.getValue());
editor.putString("currencySetting", currencySetting.getValue());
editor.putBoolean("notiSetting", notiSetting.getValue());
editor.apply();
editor.commit();
Log.d("mutlangxxc", sharedPreferences.getString("languageSetting",""));
Log.d("mutlangwww", sharedPreferences.getString("currencySetting",""));
}
然后进行活动:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
SharedPreferences mSharedPrefs = getSharedPreferences("shared_prefs", MODE_PRIVATE);
Log.d("languageSetting", mSharedPrefs.getString("langaugeSetting", "" +"kkk"));
Log.d("currencySetting", mSharedPrefs.getString("currencySetting", ""));
Log.d("notiSetting", String.valueOf(mSharedPrefs.getBoolean("notiSetting", false)));
if (mSharedPrefs.contains("langaugeSetting")) {
Log.d("hasSetting", "true");
} else {
Log.d("hasSetting", "fase");
}
当我在将它们设置为视图模型后立即打印它们时,打印效果很好,但是当我在活动中打印它们时,就无法打印了..而且当我检查它是否包含某些键时,它会给我错误
如何解决?