SharedPreferences文件的名称是什么?

11

我是 Android 新手,连续六个小时都卡在这里了。

问题是我不知道偏好设置文件的名称,并且需要从偏好设置文件中获取值。我正在使用 Android Studio 并创建了一个“设置活动”。一路上除了 SettingsActivity.java,我没有给任何文件命名。

所以我的问题是共享偏好设置文件的名称是什么(因为应用程序保留了值)。或者如果有办法找到它的话。

或者也许我在代码中缺少明显的东西。以下是我的相关代码。

String key = "example_text";
final String PREF_FILE_NAME = "SettingsActivity";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
String value = preferences.getString(key, " null");                

编辑1:我有一个名为RemoteDevice.java的活动,在这个活动中,我有一个用于互联网使用的异步任务子类。现在我已经通过上述PreferencesActivity存储了IP地址,现在想要检索它。但是我找不到它。

编辑2:在下面的代码中,我正在尝试从编辑文本中获取值。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<!-- NOTE: EditTextPreference accepts EditText attributes. -->
<!-- NOTE: EditTextPreference's summary should be set to its value by the activity code. -->
<EditTextPreference
    android:key="example_text"
    android:title="@string/pref_host_ip_address"
    android:defaultValue="@string/pref_default_host_address"
    android:selectAllOnFocus="true"
    android:inputType="numberDecimal"
    android:digits="123456789."
    android:capitalize="words"
    android:singleLine="true"
    android:maxLines="1" />

<!-- NOTE: Hide buttons to simplify the UI. Users can touch outside the dialog to
     dismiss it. -->
<!-- NOTE: ListPreference's summary should be set to its value by the activity code. -->
<ListPreference
    android:key="example_list"
    android:title="@string/pref_title_add_friends_to_messages"
    android:defaultValue="-1"
    android:entries="@array/pref_example_list_titles"
    android:entryValues="@array/pref_example_list_values"
    android:negativeButtonText="@null"
    android:positiveButtonText="@null" />

我猜这里 android:key 是要在

String value = preferences.getString(key, " null");

中作为参数传递的关键字。

3个回答

21
我正在使用Android Studio并创建了一个“设置Activity”。然后,您可以通过`PreferenceManager.getDefaultSharedPreferences()`获取您的`SharedPreferences`。请用以下内容替换:
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

随着:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

我已经尝试过了,但问题是我正在另一个活动的AsyncTask-子类中使用上述代码。 - Abbas
1
@AbbasA.Ali:那又怎样?这并不会改变你访问由PreferenceFragmentPreferenceActivity使用的SharedPreferences实例的方式。你可以调用PreferenceManager.getDefaultSharedPreferences(),并提供你应用程序中的任何 Context作为参数(例如,一个Activity实例)。 - CommonsWare
那么你可以在任何活动中给出任何活动的上下文吗? - Abbas
我尝试了,但它不起作用。我仍然得到 null - Abbas
谢谢,我用了你的方法找到了。很抱歉回复晚了,但我的一些朋友建议我不要对我的设备进行root。但最终它对我起作用了,我找到了文件。此外,有没有办法更改Shared Pref.文件的名称?或者在构建时更改名称?谢谢。 - Abbas
此方法已被弃用。 - EslamWael74

0

在真实设备上运行您的项目,如果创建了一个SharedPreferences文件(它具有.xml扩展名),则可以在设备的根目录中找到它,更确切地说,在此处:

/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml 或 /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml

顺便说一下,您可以使用getPreferences()方法。将您的

SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

改为

SharedPreferences preferences = getPreferences(MODE_PRIVATE);

您的SharedPreferences文件将获得默认名称。但请记住,仅当您不需要在项目中使用多个SharedPreferences文件时,才值得使用getPreferences()而不是getSharedPreferences()。


我正在我的安卓手机上运行它。但数据文件夹在哪里? - Abbas
我看不到我的项目的包名。这是否意味着没有首选项文件?因为每当我在手机上运行应用程序并更改首选项,然后重新运行它时,它都会保持更新。我还尝试了“显示隐藏文件和文件夹”。 - Abbas
也许你的应用程序安装在外部SD卡上。你有检查过吗? - DH28
那就是问题所在,我没有外部SD卡。 - Abbas
你需要进入文件系统的根目录。如果从文件浏览器无法实现,请尝试使用安卓版的Total Commander。 - DH28

0
你可以使用这个:
String key = "example_text";
final String PREF_FILE_NAME = "SettingsActivity";
shared = getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE);
String value = preferences.getString(key, " null");

但首先您需要使用您的键保存一些值,例如:

shared.edit().putString(key,"MY_VALUE").commit();

我正在使用我的安卓手机进行此操作,它保留了更改后的值。所以我认为这些值都在那里。还有其他建议吗? - Abbas
请明确您的问题,您遇到了什么问题。 - Aakash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接