Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android如何从首选项对象设置和检索数据_Java_Android_Sharedpreferences - Fatal编程技术网

Java Android如何从首选项对象设置和检索数据

Java Android如何从首选项对象设置和检索数据,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在处理一个首选项片段,其中一个首选项是选择一个外部图像文件作为应用程序背景 我尝试将文件路径字符串保存到相应的首选项,以便在应用程序启动时可以从SharedReferences加载该路径数据 我的问题是,当使用Preference类而不是EditTextPreference时,没有setText()方法来保存路径值,并且我无法理解如何将数据存储到Preference对象上,然后在我的活动中通过SharedReferences.getString(“key”),检索 如果我改用EditText

我正在处理一个首选项片段,其中一个首选项是选择一个外部图像文件作为应用程序背景

我尝试将文件路径字符串保存到相应的首选项,以便在应用程序启动时可以从
SharedReferences
加载该路径数据

我的问题是,当使用
Preference
类而不是
EditTextPreference
时,没有
setText()
方法来保存路径值,并且我无法理解如何将数据存储到
Preference
对象上,然后在我的活动中通过
SharedReferences.getString(“key”),检索

如果我改用
EditTextPreference
,它确实可以工作,但我必须禁用或自定义
EditTextPreference
的对话框组件,因为我需要启动一个新的活动以在点击此首选项时拾取图像

我注意到在官方文档中,他们在一起使用intent时使用了
首选项
。有没有办法将数据保存到
首选项
对象,然后在活动中检索该数据

//在首选项片段中
私人偏好bgPref;
@凌驾
活动结果的公共无效性(
int requestCode,int resultCode,@Nullable Intent data){
super.onActivityResult(请求代码、结果代码、数据);
if(resultCode==RESULT\u OK&&data!=null){
Uri imageUri=data.getData();
最终字符串路径=getFilePath(requireContext(),imageUri);
if(路径!=null){
bgPref.setText(path);//如何为首选项设置字符串值?
Drawable d=Drawable.createFromPath(路径);
if(containerView!=null){
集装箱视野后退(d);
}
}
}否则{
Toast.makeText(requireContext(),“您还没有选择图像”,Toast.LENGTH\u LONG.show();
}
}
//主要活动
SharedPreferences SharedPrefers=PreferenceManager.getDefaultSharedPreferences(此);
String bgPath=sharedPrefs.getString(“bgPath”,”);
Drawable d=Drawable.createFromPath(bgPath);
如果(!bgPath.isEmpty())找到dviewbyd(R.id.nav_host_fragment).setBackground(d);
//...

您可以直接编辑此首选项。在onActivityResult()中的


您尝试过这个->
吗?我不知道如何将数据存储到首选项对象上,然后通过SharedReferences.getString(“key”),检索数据。
??如果您以后想从共享首选项中检索数据,您应该将数据保存到共享首选项中。谢谢您的回复,我理解您的观点,实际上它正在我的片段文件中使用此代码,我只是想知道是否有类似于
EditTextPreference
setText
<代码>首选项管理器.getDefaultSharedReferences(requireContext()).edit().putString(“bgPath”,path).apply()
首选项
编辑文本首选项
都是UI类,不是存储数据的方式s文件。您可以阅读如何在Android中存储数据。如果您希望路径字符串在您的首选项下可见,您只需将所选路径设置为该首选项的摘要。
@Override
public void onActivityResult(
    int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && data != null) {
            Uri imageUri = data.getData();
            final String path = getFilePath(requireContext(), imageUri);
            if (path != null) {
                // Save preference here
                SharedPreferences.Editor editor = sharedPrefs.edit();
                editor.putString("bgPath", path);
                editor.apply();
                // Now recreate activity to refresh the UI
                requireActivity().recreate();
                // In onCreateView, you can use this preference to set background
            }
        } else {
            Toast.makeText(requireContext(), "You haven't picked Image", Toast.LENGTH_LONG).show();
        }
    }
}