2014-03-17 5 views
5

Hell Я пытаюсь сделать рекорды для своего проекта, но мой код сохраняет только последнее значение, не самое высокое значение Как сохранить только самое высокое значение? вот мой код.Использование общих настроек для сохранения высоких показателей

Этот процесс сохранения ->

  SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE); 
      SharedPreferences.Editor editor = prefs.edit(); 
      TextView outputView = (TextView)findViewById(R.id.textscore); 
      CharSequence textData = outputView.getText(); 

      if (textData != null) { 
       editor.putString(TEXT_DATA_KEY, textData.toString()); 
       editor.commit(); 
      } 

Это Процесс чтения

SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE); 

    String textData = prefs.getString(TEXT_DATA_KEY, "No Preferences!"); 


      TextView outputView = (TextView) findViewById(R.id.textread); 
+0

Вы, кажется, делаете правильно, какой результат? Нет настроек! ? –

+0

оно сохраняет последнее значение не самое высокое значение – Boldbayar

+0

Вам нужно проверить ранее сохраненное значение, чтобы узнать, какая из них самая высокая. – Doomsknight

ответ

2

Вы должны проверить ранее сохраненное значение, чтобы увидеть, который наивысший результат, вы просто сохраните последнее значение, а не самое высокое

Например

 if (textData != null) { 
      int score = Integer.parseInt(textData.toString()); 

      if(score > prefs.getInt(TEXT_DATA_KEY, 0)) // Or get String, with parse Int. 
      { 
       //editor.putString(TEXT_DATA_KEY, textData.toString()); // Should be saved as int 
       editor.putInt(TEXT_DATA_KEY, score); 
       editor.commit(); 
      } 
     } 
+0

, но редактор дает ошибку: D – Boldbayar

+0

Метод getInt (String, int) не определен для типа SharedPreferences.Editor – Boldbayar

+0

@Boldbayar Вы right, используйте prefs, так как это не вызывает '.edit()'. Я вскочил на шаг. постскриптум вы должны хранить оценку как int, используя 'putInt()' не строку. – Doomsknight

1

Вы должны сохранить новое значение, только если существующее значение в общих предпочтений меньше, чем новое значение.

Вам не кажется, имея эту проверку значения в коде

1

Заменить

if (textData != null) { 
       editor.putString(TEXT_DATA_KEY, textData.toString()); 
       editor.commit(); 
      } 

с

if (textData != null) { 
      if(Integer.parseInt(prefs.getString(TEXT_DATA_KEY, "0")) < Integer.parseInt(outputView.getText())) { 
       editor.putString(TEXT_DATA_KEY, textData.toString()); 
       editor.commit(); 
      } 
     } 
+0

Возможно, вы используете разные значения для записи оценки, вам нужно соответствующим образом изменить разбор. –

+0

Метод parseInt (String) в типе Integer не применим для аргументов (CharSequence) – Boldbayar

0

Прежде всего, почему вы сохраняете высокий уровень как строку, используйте int или float (если необходимо).

Самый простой способ - прочитать высокий балл, прежде чем сохранять его и сравнить с тем, который вы пытаетесь сохранить.

0

Вы хотите отслеживать свой высокий балл в игре. Это проще всего сделать с помощью номера, а не использовать строку текстового вида по:

int hiScore = 0; 

В вашем запуске, возможно, в OnCreate(), вы хотите, чтобы получить предыдущий высокий балл:

SharedPreferences prefs = getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE); 
try { 
    hiScore = prefs.getInt(HI_SCORE, 0); 

} catch (NumberFormatException e) { 
    hiScore = 0; 
} 

Когда новый балл получен, вы хотите записать его, если он выше, чем предыдущий высокий балл:

if (newScore > hiScore) { 
    hiScore = newScore; 

    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putInt(HI_SCORE, hiScore); 
    editor.commit(); 
} 
Смежные вопросы