SharedPreferences不检索不同Activity中的Int值

时间:2014-06-04 00:25:04

标签: java android sharedpreferences

在我的应用中,我存储来自不同片段的整数和字符串数据。 该数据在同一片段中成功检索。 在整个应用程序中成功检索String数据。

但是无法从不同的活动中检索整数数据。然而,在同一片段中它可以。如果我尝试从不同的活动中获取一个整数,它总是给我设置默认值。 这是我的代码。请注意,我已经使用常量来检索数据。

保存号码:

public void saveNumberChange(String s, int data){
    String help = "com.example.test2.PREFERENCE_FILE_KEY_"+username;
    Context context = getActivity();
    SharedPreferences sharedPref = context.getSharedPreferences(help, Context.MODE_PRIVATE);

    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putInt(s, data);
    editor.commit();
}

让他们退出:

public int getNumber(String s){
    int data;
    String help = "com.example.test2.PREFERENCE_FILE_KEY_"+username; 
    Context context = getActivity();
    SharedPreferences sharedPref = context.getSharedPreferences(help, Context.MODE_PRIVATE);
    data = sharedPref.getInt(s, 0);
    return data;
}

有趣的是,当我将整数存储为字符串时,它们可以再次在同一个活动中检索,而不是从另一个活动中检索。使用纯字符串一切都很好。

更多代码:

保存整数:

saveNumberChange(BeyouApplicationClass.AGE, valueage);

获取整数:

getNumber(BeyouApplicationClass.AGE);

感谢您的帮助。我希望你能帮助我。

3 个答案:

答案 0 :(得分:0)

您无法从其他活动访问它,因为您只使用该活动的上下文将其保存在该活动上。

<强>溶液

而不是使用活动的context.getSharedPreferences,而是使用整个应用程序的PreferenceManager.getDefaultSharedPreferences在其活动中共享数据

示例:

<强> saveNumberChange

public void saveNumberChange(String s, int data){
Context context = getActivity();
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);

SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(s, data);
editor.commit();
}

<强> getNumber

public int getNumber(String s){
int data;
Context context = getActivity();
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
data = sharedPref.getInt(s, 0);
return data;
}

答案 1 :(得分:0)

尝试以这种方式获取您的偏好:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

在所有活动中,并以相同的方式获取编辑器

答案 2 :(得分:0)

所以我发现了以下内容。

对于遇到同样问题的每个人: 从片段内保存共享首选项将导致我之前描述的问题。 只有那个特定的片段才能获得信息。 所以总是通过调用它的主机活动来保存片段。 我做的是这个:

public static void saveNumberChange(String s, int data){
            String help = "com.example.test2.PREFERENCE_FILE_KEY_"+username;
            SharedPreferences sharedPref = context.getSharedPreferences(help, Context.MODE_PRIVATE);

            SharedPreferences.Editor editor = sharedPref.edit();
            editor.putInt(s, data);
            editor.commit();
        }

      public static int getNumber(String s){
            int data;
            String help = "com.example.test2.PREFERENCE_FILE_KEY_"+username; 
            SharedPreferences sharedPref = context.getSharedPreferences(help, Context.MODE_PRIVATE);
            data = sharedPref.getInt(s, 0);
            return data;
        }

使您的方法保持静态,以便可以从附加的片段中调用它,一切正常。