如何从Android中新的加密共享首选项打印共享首选项值?

时间:2020-09-29 16:42:55

标签: android encryption sharedpreferences

我正在尝试在带有片段..的视图模型中存储一些共享的首选项。然后,当我关闭应用程序并重新打开它时,我想在某些活动中将其打印出来,但是无法打印!

这是我的代码:

我的片段:

@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");
        }

当我在将它们设置为视图模型后立即打印它们时,打印效果很好,但是当我在活动中打印它们时,就无法打印了..而且当我检查它是否包含某些键时,它会给我错误

如何解决?

0 个答案:

没有答案