相关疑难解决方法(0)

如何在Android中使用SharedPreferences来存储,获取和编辑值

我想存储一个时间值,需要检索和编辑它.我SharedPreferences该怎么用呢?

android sharedpreferences

599
推荐指数
20
解决办法
62万
查看次数

共享偏好存储在哪里?

Eclipse项目中可能遇到共享首选项文件的位置?

android sharedpreferences

141
推荐指数
6
解决办法
14万
查看次数

Android getDefaultSharedPreferences

我的代码是:

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean hasBeenShown = prefs.getBoolean(eulaKey, false);
Run Code Online (Sandbox Code Playgroud)

始终根据操作系统版本返回不同的值.在2.2,2.3.4,3.2,4.0.3中测试 - 返回正确的值.但对于带有CianogenMod 7.1的2.3.7设备Zte刀片 - 结果总是错误的.我想getBoolean的默认值.

这是编写boolean的代码:

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();
Run Code Online (Sandbox Code Playgroud)

有人有任何想法吗?

更新:将我当前的代码与我之前的代码版本进行比较 - 代码没有区别.唯一不同的是清单:代码工作正常minVersion = 8和targetVersion = 8现在我正在编译minversion = 8和target = 13 /因为Admob /.也许有些API改变了,但我没有发现这一点.

解决方案: - 从快捷方式启动应用程序,从菜单中为我提供不同的DefaultSharedPreferences.从我的代码中删除DefaultSharedPreferences后 - 它完美无缺.我不能只说:人们不做捷径,所以我不得不改变代码.

android sharedpreferences

54
推荐指数
2
解决办法
6万
查看次数

何时使用getDefaultSharedPreferences和getSharedPreferences

我只是好奇.有3种方法:

1. getPreferenceManager().setSharedPreferencesName(String PrefName);

2. PreferenceManager.getDefaultSharedPreferences(Context context)

3. Context.getSharedPreferences (String name, int mode)
Run Code Online (Sandbox Code Playgroud)

据我所知,第三种方法仅在使用第一种方法时使用,对吧?但是我们也用3种方法addPreferencesFromResource(int resID); 那么区别是什么呢?我们什么时候可以使用这些方法之一?谢谢!

android

21
推荐指数
1
解决办法
1万
查看次数

SharedPreferences不会在PreferenceActivity中保存/加载

编辑: 下面描述的问题是由于一个非常奇怪的设备问题不是由任何编码相关的问题引起的.

我有一个preferenceActivity,其中有很多checkBoxPreferences.checkBoxPreference假设保存默认的共享首选项文件,然后在我打开应用程序时再次调用以更新UI.

这不会像它想象的那样发生.如果我关闭应用程序并将其重新打开,我的值仍然像他们想象的那样,但如果我使用任务管理器来结束应用程序,或者如果我重新启动手机(当应用程序未运行时),则调用defaultValues再次.

所以,我在onResume()中创建了一个SharedPreference来测试它.

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

然后我检查该共享首选项中是否有密钥.

pref.contains("myCheckBoxPreference");
Run Code Online (Sandbox Code Playgroud)

当我关闭并重新打开它时,它返回true.如果我与任务管理器关闭或关闭和打开电话,则返回false.

所以,我尝试手动设置SharedPreference

SharedPreferences.Editor editor = pref.edit();
editor.putBoolean("myCheckBoxPreference", myCheckBoxPreference.isChecked());
editor.commit();
Run Code Online (Sandbox Code Playgroud)

然后我在checkboxpreference值更改时调用了它.我也尝试在onStop和onPause中调用它.尽管如此,如果我关闭应用程序并将其重新打开,pref.contains将返回true,但如果我重新启动手机并重新打开,则返回false.

所以我尝试使用SharedPreferences文件.

在类声明中:

public static final String PREFS = "prefs";
Run Code Online (Sandbox Code Playgroud)

在onResume()中:

SharedPreferences pref = this.getSharedPreferences(PREFS, 0);
Run Code Online (Sandbox Code Playgroud)

同样的行为,如果我只是关闭应用程序并将其重新打开,pref.contains仍会返回true,但如果我关闭并重新打开手机,则返回false.

然后,我尝试myCheckBoxPreference的键值改变的东西,没有为CheckBoxPreference符合XML密钥,它仍然有同样的效果.

我从手机上卸下了应用程序,然后打开电源并重新打开,然后重新安装,它仍然具有相同的效果.

android taskmanager preference preferenceactivity sharedpreferences

14
推荐指数
2
解决办法
1万
查看次数

在SyncAdapter中提交的SharedPreference未在Activity中更新?

我在同步成功后在SyncAdapter中更改并提交SharedPreference,但是当我在Activity中访问首选项时,我没有看到更新的值(相反,我看到的是旧值).我究竟做错了什么?不同的上下文?

我在SyncAdapter中更新首选项:

class SyncAdapter extends AbstractThreadedSyncAdapter {
    private int PARTICIPANT_ID;
    private final Context mContext;
    private final ContentResolver mContentResolver;

    public SyncAdapter(Context context, boolean autoInitialize) {
        super(context, autoInitialize);
        mContext = context;
        mContentResolver = context.getContentResolver();
    }

    public SyncAdapter(Context context, boolean autoInitialize, boolean allowParallelSyncs) {
        super(context, autoInitialize, allowParallelSyncs);
        mContext = context;
        mContentResolver = context.getContentResolver();
    }

    @Override
    public void onPerformSync(Account account, Bundle extras, String authority,
                              ContentProviderClient provider, SyncResult syncResult) {

        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
        PARTICIPANT_ID = Integer.parseInt(prefs.getString("participant_id", "0"));

        if (success) {
            // save and …
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences android-syncadapter

13
推荐指数
1
解决办法
2771
查看次数

共享首选项始终返回默认值

这是我用来在首选项中创建和存储值的代码。传出是字符串变量。

SharedPreferences sp = getSharedPreferences(outgoing, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();                
editor.putString("PhoneNo","Hi");
editor.commit();
Run Code Online (Sandbox Code Playgroud)

这是从 SharedPreference 获取值的代码。

SharedPreferences sp 
=getSharedPreferences(outgoing,Activity.MODE_PRIVATE);
String calln = sp.getString("PhoneNo","0");
Toast.makeText(mContext, "SHARED"+calln,Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences

5
推荐指数
1
解决办法
2910
查看次数

搞乱Android的共享偏好 - 使用哪个功能?

这是一个标准任务:在应用程序的共享首选项中存储一些值,以便以后能够检索它.但是人们会发现有3个函数可以在那里存储一个值:

//1.
public static SharedPreferences PreferenceManager.getDefaultSharedPreferences(Context context) {}

//2.
public SharedPreferences Activity.getPreferences(int mode) {}

//3.
public SharedPreferences ContextWrapper.getSharedPreferences(String name, int mode) {}
Run Code Online (Sandbox Code Playgroud)

所以现在问题是:选择哪一个,哪一个更好,或者每个人的目的是什么?

android default sharedpreferences

4
推荐指数
1
解决办法
1570
查看次数

getPreferences始终返回默认值

我已经设置了PreferenceFragment两个布尔首选项.在Fragment当应用程序被关闭并重新打开,做工精细和设置存储.但是,在尝试阅读这些值时,我遇到了问题; 仅返回默认值.如果我调试getBoolean方法,SharedPreferences我看到本地HashMap的大小为0,因此返回默认值,如下所示:

public boolean getBoolean(String key, boolean defValue) {
    synchronized (this) {
        awaitLoadedLocked();
        Boolean v = (Boolean)mMap.get(key); // <-- mMap is of size 0: return defValue
        return v != null ? v : defValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这很奇怪,因为偏好值显然是存储并正确加载到PreferenceFragment.我错过了什么?

Activity.onCreate():

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
Run Code Online (Sandbox Code Playgroud)

RES/XML /的preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory
        android:key="mm_preferences_category_recipe_preferences"
        android:title="@string/mm_preferences_category_recipe_preferences_title" >
        <CheckBoxPreference
            android:key="@string/mm_preferences_numbers_as_fractions_key"
            android:title="@string/mm_preferences_numbers_as_fractions_title"
            android:summary="@string/mm_preferences_numbers_as_fractions_summary"
            android:defaultValue="true" />
        <CheckBoxPreference
            android:key="@string/mm_preferences_comma_as_decimal_separator_key"
            android:title="@string/mm_preferences_comma_as_decimal_separator_title"
            android:summary="@string/mm_preferences_comma_as_decimal_separator_summary"
            android:defaultValue="true" />
    </PreferenceCategory>
</PreferenceScreen> …
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences

3
推荐指数
1
解决办法
2445
查看次数

PreferenceManager.getDefaultSharedPreferences()vs getPreferences()

PreferenceManager.getDefaultSharedPreferences(context)
Run Code Online (Sandbox Code Playgroud)

getPreferences()
Run Code Online (Sandbox Code Playgroud)

似乎检索不同的首选项.

PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                        "userWasAskedToEnableGps", false);
Run Code Online (Sandbox Code Playgroud)

对我来说,返回false,

getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);
Run Code Online (Sandbox Code Playgroud)

返回true.

Preference是用编辑器编写的

Editor e = getPreferences(MODE_PRIVATE).edit(); 
e.putBoolean (...);
e.commit();
Run Code Online (Sandbox Code Playgroud)

如何在Context中的Activity之外获得相同的Preferences?

android android-preferences sharedpreferences

2
推荐指数
2
解决办法
2万
查看次数

如何在共享的首选项文件中添加多个条目

能否请您告诉我如何使用共享首选项在共享首选项文件中写入多个条目。就像我想在共享首选项文件中添加多个名称一样,我正在使用以下代码,但是每次单击提交按钮时,它都会覆盖上一个条目。

public void onClick(View v) 
{           
    SharedPreferences settings = getSharedPreferences("users", 0);
    SharedPreferences.Editor editorUser = settings.edit();
    editorUser.putString("user", editUser.getText().toString());
    editorUser.commit();
}
Run Code Online (Sandbox Code Playgroud)

android sharedpreferences

2
推荐指数
1
解决办法
941
查看次数

getSharedPreferences() 中的 String 参数有什么作用?

编辑:提供的“重复”不能解决我的问题,因为它没有完全回答我的问题。(关于第二个参数的信息丢失)。


这个问题旨在为新的Android开发人员清除信息,而不是解决我自己的问题。请重新考虑否决票。

所以,这是方法:

getSharedPreferences(string, Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

我真的无法理解第一个参数的作用。它有什么作用?如果我们保存东西时SharedPreferences使用密钥,为什么会有第一个参数?

parameters android android-sharedpreferences

0
推荐指数
1
解决办法
3223
查看次数