2016-06-07 3 views
0

Я делаю простую игру памяти в студии Android. Игра содержит 2 действия (MainActivity, GameActivity). Мне нужно сохранить высокий балл от GameActivity и показать его в MainActivity. Я уже пытался использовать SharedPreferences, но высокий балл остается 0 в MainActivity. Вот код, я имею в GameActivity:Как сохранить высокий балл в Android-игре

SharedPreferences prefs; 
SharedPreferences.Editor editor; 
String dataName = "MyData"; 
String intName = "MyInt"; 
int defaultInt = 0; 
int hiScore; 

prefs = getSharedPreferences(dataName,MODE_PRIVATE); 
editor = prefs.edit(); 
hiScore = prefs.getInt(intName, defaultInt); 
editor.putInt(intName, hiScore); 
editor.commit(); 

код в MainActivity:

SharedPreferences prefs; 
String dataName = "MyData"; 
String intName = "MyString"; 
int defaultInt = 0; 
public static int hiScore; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    prefs = getSharedPreferences(dataName,MODE_PRIVATE); 
    hiScore = prefs.getInt(intName, defaultInt); 
    TextView textHiScore =(TextView) findViewById(R.id.textHiScore); 
    textHiScore.setText("Hi: "+ hiScore); 
} 
+0

Рассмотрите возможность использования постоянных постоянных констант String для сохранения ваших ключей во всех действиях. –

+0

Спасибо, я запомню это. – Simo

ответ

0

Вы сохраняете hiScore как «MyInt» и пытается восстановить его как «MyString»

0

Вы не должны инициализировать hiScore
в GameActivity:

hiScore = prefs.getInt(intName, defaultInt); 
editor.putInt(intName, hiScore); 

вы просто прочитать значение из префов, Не инициализировать hiScore, поэтому значение hiScore является defaultInt

И в MainActivity:

String intName = "MyString"; 
hiScore = prefs.getInt(intName, defaultInt); 

префы не содержат ключевые eqauls "MyString" значение, так значение hiScore является defaultInt

2

в GameActivity

String intName = "MyInt"; 

т он код в MainActivity:

String intName = "MyString"; // change it to "MyInt" 

держать тот же аргумент intName в обоих мероприятиях.

+0

Спасибо, теперь он работает правильно. Я не знал, что ключ должен иметь одно имя. – Simo

+1

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

2

В GameActivity: вы получили & положили тот же высокий балл.

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