2016-01-31 2 views
1

hi Я хочу сохранить свою высокую оценку за счет общих настроек. но когда я перехожу к другому действию, а затем получаю такую ​​же активность, моя высокая оценка снова начинается с нуля. Я знаю его просто, но я не знаю, какую ошибку я делаю. вот пример кода.Сохранение значений в общих предпочтениях

private static final String FORMAT = "%02d:%02d:%02d"; 
    int count = 0, high; 
    int seconds , minutes; 
    SharedPreferences sharedPreferences; 
    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 

     sharedPreferences = getPreferences(MODE_PRIVATE); 
     int savedPref = sharedPreferences.getInt("HighScore", 0); 

     final TextView counter=(TextView)findViewById(R.id.taptimes); 
     final TextView countdown=(TextView)findViewById(R.id.countdown); 
     final TextView highScore = (TextView)findViewById(R.id.highScore); 
     final Button b1=(Button)findViewById(R.id.keypress); 

     b1.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       countClick(); 
      } 

      private void countClick() { 
       // TODO Auto-generated method stub 
       count++; 
       counter.setText(String.valueOf(count)); 
       if (count > high){ 

        highScore.setText(Integer.toString(count)); 
        high = count; 

        sharedPreferences = getPreferences(MODE_PRIVATE); 
        SharedPreferences.Editor editor = sharedPreferences.edit(); 
        editor.putInt("HighScore", high); 
        editor.commit(); 
       } 
      } 
     }); 


     new CountDownTimer(10000, 1000) {//CountDownTimer(edittext1.getText()+edittext2.getText()) also parse it to long 

      public void onTick(long millisUntilFinished) { 
       countdown.setText("Time remaining: " + millisUntilFinished/1000); 
       //here you can have your logic to set text to edittext 
      } 

      public void onFinish() { 
       countdown.setText("Time Over!"); 
       b1.setEnabled(false); 
      } 
      } 
      .start(); 

    } 

    @Override 
    public void onBackPressed() 
    { 
     super.onBackPressed(); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.home, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

    } 


} 
+0

для меня этот код работает отлично.Если я запускаю это действие несколько раз, я могу получить сохраненное значение. Возможно, вы сбросите значение во второй активности. – thedarkpassenger

+0

Вторая активность не имеет ничего общего с этим .. Я не знаю, почему бы не сохранить значение –

+0

Где вы используете savedPref? Извините, я нахожусь на мобильном экране, и я не вижу ничего лучше, но я думаю, что вы не инициализируете счет – FranMowinckel

ответ

0

В OnCreate метода, который я просто пропустил это .. спасибо за все

high = sharedPreferences.getInt("HighScore", 0); 
highScore.setText(Integer.toString(high)); 
0

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

public class AppSharedPreferences { 

      private SharedPreferences appSharedPrefs; 
      private SharedPreferences.Editor prefsEditor; 
      private static AppSharedPreferences appSharedPrefrence; 

      public AppSharedPreferences(Context context) { 
      this.appSharedPrefs = context.getSharedPreferences("sharedpref", Context.MODE_PRIVATE); 
      this.prefsEditor = appSharedPrefs.edit(); 
     } 

     public AppSharedPreferences() { 

     } 

     public static AppSharedPreferences getsharedprefInstance(Context con) { 
      if (appSharedPrefrence == null) 
       appSharedPrefrence = new AppSharedPreferences(con); 
      return appSharedPrefrence; 
     } 

     public SharedPreferences getAppSharedPrefs() { 
      return appSharedPrefs; 
     } 

     public void setAppSharedPrefs(SharedPreferences appSharedPrefs) { 
      this.appSharedPrefs = appSharedPrefs; 
     } 

     public SharedPreferences.Editor getPrefsEditor() { 
      return prefsEditor; 
     } 

     public void Commit() { 
      prefsEditor.commit(); 
     } 

     public void clearallSharedPrefernce() { 
      prefsEditor.clear(); 
      prefsEditor.commit(); 
     } 
    public void setHelperId(int helperId) 
    { 
     this.prefsEditor=appSharedPrefs.edit(); 
     prefsEditor.putInt("helper_id", helperId); 
     prefsEditor.commit(); 
    } 
     public int getHelperId() 
     { 
      return appSharedPrefs.getInt("helper_id",0); 
     } 
} 

для сохранения значений в общих предпочтениях создайте метод get и set, как показано в конце кода. Пусть все остальные методы кода как есть.

И использовать этот код в вашем классе просто создать экземпляр общего предпочтения в своем классе, как этот

appSharedPreferences= AppSharedPreferences.getsharedprefInstance(YourActivity.this) ; 
+0

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

+0

ваш код настройки значения не работает должным образом Я думаю, что, когда вы пытаетесь его получить, возвращается значение по умолчанию –

+0

, как это сделать? –

0

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

sharedPreferences=context.getSharedPreferences(Constants.MYUSERPREF, 0); //the 0 in the initialization is for private mode. 

Кроме того, важная вещь, чтобы сделать это после того, как вы измените значения и вызвать editor.commit(); также называют editor.apply();, чтобы сохранить изменения в sharedPreferences

+0

не работает для меня ... –

+0

Что именно происходит? вы вызвали 'editor.apply();' везде, где совершена фиксация? –

+0

да я сделал, но все еще не работал .. я не знаю, почему его значение не сохраняется –

0

Пожалуйста, создать общий класс для применения Выполните сильфонные шаги:

Шаг 1:

Создать Применение в Уровень Тион Класс

public class AppConfig extends Application { 

private static AppConfig appInstance; 
private static SharedPreferences sharedPreferences; 
private static SharedPreferences.Editor sharedPreferencesEditor; 
private static Context mContext; 

@Override 
public void onCreate() 
{ 
    super.onCreate(); 
    appInstance = this; 
    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    sharedPreferencesEditor = sharedPreferences.edit(); 
    setContext(getApplicationContext()); 

} 

public static Context getContext() { 
    return mContext; 
} 

public static void setContext(Context mctx) { 
    mContext = mctx; 
} 


public static AppConfig getAppInstance() { 
    if (appInstance == null) 
     throw new IllegalStateException("The application is not created yet!"); 
    return appInstance; 
} 

/** 
* Application level preference work. 
*/ 
public static void preferencePutInteger(String key, int value) { 
    sharedPreferencesEditor.putInt(key, value); 
    sharedPreferencesEditor.commit(); 
} 

public static int preferenceGetInteger(String key, int defaultValue) { 
    return sharedPreferences.getInt(key, defaultValue); 
} 

public static void preferencePutBoolean(String key, boolean value) { 
    sharedPreferencesEditor.putBoolean(key, value); 
    sharedPreferencesEditor.commit(); 
} 

public static boolean preferenceGetBoolean(String key, boolean defaultValue) { 
    return sharedPreferences.getBoolean(key, defaultValue); 
} 

public static void preferencePutString(String key, String value) { 
    sharedPreferencesEditor.putString(key, value); 
    sharedPreferencesEditor.commit(); 
} 

public static String preferenceGetString(String key, String defaultValue) { 
    return sharedPreferences.getString(key, defaultValue); 
} 

public static void preferencePutLong(String key, long value) { 
    sharedPreferencesEditor.putLong(key, value); 
    sharedPreferencesEditor.commit(); 
} 

public static long preferenceGetLong(String key, long defaultValue) { 
    return sharedPreferences.getLong(key, defaultValue); 
} 

public static void preferenceRemoveKey(String key) { 
    sharedPreferencesEditor.remove(key); 
    sharedPreferencesEditor.commit(); 
} 

public static void clearPreference() { 
    sharedPreferencesEditor.clear(); 
    sharedPreferencesEditor.commit(); 
} 

}

Шаг 2:

Определить этот класс в manifest.xml в теге Application как этот

<application 
    android:name=".AppConfig"> 
</application> 

Шаг 3:

Вы можете использовать ниже код в вашей деятельности

AppConfig.preferencePutInteger("HighScore",yourScore); 
AppConfig.preferenceGetInteger("HighScore", 0) 
1

Единственная проблема, которую я вижу, что вы ничего не делаете с savedPref:

int savedPref = sharedPreferences.getInt("HighScore", 0); 

Я думаю, что это должно быть:

high = sharedPreferences.getInt("HighScore", 0); 

Не вызывает ли ваша IDE предупреждение о том, что savedPref бесполезен?

Смежные вопросы