代码之家  ›  专栏  ›  技术社区  ›  lord_sneed

安卓系统:共享偏好问题(多个共享偏好)

  •  0
  • lord_sneed  · 技术社区  · 12 年前

    我有多个 SharedPreferences 每个存储一个 int 每个值。我已成功创建多个 共享首选项 之前,但我正在尝试一种稍微不同的方法。我只保留最高的5个值。我从它的 SharedPreference ,然后我将5个值加上我想与其他值进行比较的当前值 ArrayList 。我正在对它调用反向排序方法,然后删除最后一个值(因为它是多余的)。然后,我将每个索引放入 共享首选项 。这是我所拥有的:

    prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE);
    int value1 = prefs1.getInt("number1", 0);
    
    prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE);
    int value2 = prefs2.getInt("number2", 0);
    
    prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE);
    int value3 = prefs3.getInt("number3", 0);
    
    prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE);
    int value4 = prefs4.getInt("number4", 0);
    
    prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE);
    int value5 = prefs5.getInt("number5", 0);
    
    ArrayList<Integer> numList = new ArrayList<Integer>();
    Collections.addAll(numList, value0, value1, value2, value3, value4, value5);
    Collections.sort(numList, Collections.reverseOrder());
    numList.remove(numList.size()-1);
    value1 = numList.get(0);
    value2 = numList.get(1);
    value3 = numList.get(2);
    value4 = numList.get(3);
    value5 = numList.get(4);
    
    Editor editor = prefs1.edit();
    editor.putInt("number1", value1);
    editor.commit();
    
    editor = prefs2.edit();
    editor.putInt("number2", value2);
    editor.commit();
    
    editor = prefs3.edit();
    editor.putInt("number3", value3);
    editor.commit();
    
    editor = prefs4.edit();
    editor.putInt("number4", value4);
    editor.commit();
    
    editor = prefs5.edit();
    editor.putInt("number5", value5);
    editor.commit();
    

    我遇到的问题是,即使在 value0 在执行完之后为正。

    我这样做有什么不对吗?(如果不是,那一定是当我在另一项活动中得到这些值时,但我几乎肯定我有这个权利。)

    编辑*

    也许是在检索中,这里来自检索活动:

    prefs1 = this.getSharedPreferences("key1", Context.MODE_PRIVATE);
    num1 = prefs1.getInt("number1", 0); //0 is the default value
    tv1 = (TextView) findViewById(R.id.val1);
    tv1.setText(String.valueOf(num1));
    
    prefs2 = this.getSharedPreferences("key2", Context.MODE_PRIVATE);
    num2 = prefs2.getInt("number2", 0); //0 is the default value
    tv2 = (TextView) findViewById(R.id.val2);
    tv2.setText(String.valueOf(num2));
    
    prefs3 = this.getSharedPreferences("key3", Context.MODE_PRIVATE);
    num3 = prefs3.getInt("number3", 0); //0 is the default value
    tv3 = (TextView) findViewById(R.id.val3);
    tv3.setText(String.valueOf(num3));
    
    prefs4 = this.getSharedPreferences("key4", Context.MODE_PRIVATE);
    num4 = prefs4.getInt("number4", 0); //0 is the default value
    tv4 = (TextView) findViewById(R.id.val4);
    tv4.setText(String.valueOf(num4));
    
    prefs5 = this.getSharedPreferences("key5", Context.MODE_PRIVATE);
    num5 = prefs5.getInt("number5", 0); //0 is the default value
    tv5 = (TextView) findViewById(R.id.val5);
    tv5.setText(String.valueOf(num5));
    
    1 回复  |  直到 12 年前
        1
  •  4
  •   Community CDub    8 年前

    你可以把SharedPreferences想象成一个巨大的地图来存放你所有的东西,但除非你在做一些奇怪的事情,否则你应该从同一个巨大地图(即同一个SharedPreferences)中存储和检索数据。您正在做的是创建命名的共享首选项。我建议只使用默认值。如果你想了解更多这意味着什么 check out this question.

    因此,在您的情况下,如果您要存储5个值,您可以在相同的范围内这样做 SharedPreferences 只需提供以下不同的密钥:

    SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
    SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();
    
    mSharedPreferencesEditor.putInt("numberX", numberX);
    mSharedPreferencesEditor.putInt("numberY", numberY);
    mSharedPreferencesEditor.commit()
    
    mSharedPreferences.getInt("numberX", numberX);
    mSharedPreferences.getInt("numberY", numberY);
    

    你可以很容易地 get put 将不同的密钥转换为相同的sharedPrefs。您的代码将变为:

    SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
    SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();
    
    int value1 = mSharedPreferences.getInt("number1", 0);
    int value2 = mSharedPreferences.getInt("number2", 0);
    int value3 = mSharedPreferences.getInt("number3", 0);
    int value4 = mSharedPreferences.getInt("number4", 0);
    int value5 = mSharedPreferences.getInt("number5", 0);
    
    ...
    
    mSharedPreferencesEditor.putInt("number1", value1);
    mSharedPreferencesEditor.putInt("number2", value2);
    mSharedPreferencesEditor.putInt("number3", value3);
    mSharedPreferencesEditor.putInt("number4", value4);
    mSharedPreferencesEditor.putInt("number5", value5);
    mSharedPreferencesEditor.commit();
    

    您关于所有值为0的问题可能有所不同。我完全希望你对getInt的所有调用都是0,因为你是 从不 在sharedPrefs中存储0以外的任何内容。看起来你只是在加零和加零。我不确定你想在这里做什么,但在调用此函数之前,通过调用将数字1-5分配给0以外的值肯定会有所帮助 mSharedPreferencesEditor.putInt(number); 在sharedPrefs对象上,如下所示:

    SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());  
    SharedPreferences.Editor mSharedPreferencesEditor = mSharedPreferences.edit();
    
    //for example, for the key "number5"
    mSharedPreferencesEditor.putInt("number5", value5);