Как добавить 3 int от оценки к общему счету в андроид студии - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь собрать карточку счета из разных уровней игры.В андроид студии

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

public class ScoresActivity extends AppCompatActivity {

    TextView tv_total_Score, tvPersonalBest_Begin, tvPersonalBest_Normal, tvPersonalBest_Advance;
    Button btnReturn;

    int totalscore;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scores);

        SharedPreferences pref = getSharedPreferences("MyPref", 0);
        int scoreSPBG = pref.getInt("scoreSPBG", 0);
        SharedPreferences prefs = getSharedPreferences("MyPref", 0);
        int scoreSP = prefs.getInt("scoreSP", 0);
        SharedPreferences prefz = getSharedPreferences("MyPref", 0);
        int scoreSPAD = prefz.getInt("scoreSPAD", 0);

        SharedPreferences.Editor editor = pref.edit();
        SharedPreferences.Editor editors = prefs.edit();
        SharedPreferences.Editor editorz = prefs.edit();
        editorz.putInt("scoreSAD", scoreSPAD);
        editor.putInt("scoreSPBG", scoreSPBG);
        editors.putInt("scoreSp", scoreSP);
        editors.apply();
        editorz.apply();
        editor.apply();



        tv_total_Score = findViewById(R.id.tv_total_Score);
        tvPersonalBest_Begin = findViewById(R.id.tvPersonalBest_Begin);
        tvPersonalBest_Normal = findViewById(R.id.tvPersonalBest_Normal);
        tvPersonalBest_Advance = findViewById(R.id.tvPersonalBest_Advance);

        btnReturn =findViewById(R.id.btn_return);

        Double n1 = Double.valueOf(tvPersonalBest_Begin.getText().toString());
        double n2 =Double.valueOf(tvPersonalBest_Normal.getText().toString());
       double n3 =Double.valueOf(tvPersonalBest_Advance.getText().toString());        

       double result = n1+n2+n3;
       tv_total_Score.setText("" + result);

         totalscore = scoreSPBG + scoreSP + scoreSPAD;
         tv_total_Score.setText("" + totalscore);


        tvPersonalBest_Begin.setText("" + scoreSPBG);
        tvPersonalBest_Normal.setText("" + scoreSP);
        tvPersonalBest_Advance.setText("" + scoreSPAD);

        btnReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent returnIntent = new  Intent(ScoresActivity.this,MainActivity.class);
                startActivity(returnIntent);
            }
        });

    }

}

Я пытался с двойным, и я пытался с int, чтобы получить расчет.Но я не могу получить общее количество моих 3 уровней.

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Во-первых, у вас есть опечатка по адресу:

editorz.putInt("scoreSAD", scoreSPAD);

должна быть:

editorz.putInt("scoreSPAD", scoreSPAD);

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

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

В-третьих, вы сохраняете их в настройках как int, но вы получаете их как двойные из представления, используйте методы getDouble и putDouble, если вы ожидаете, что они будут иметь десятичные дроби.

В-четвертых, хотя я полагаю, что вы вызываете ScoresActivity рекурсивно только для отладки, рассмотрите возможность использования дополнительных функций для передачи аргументов в действие вместо использования предпочтений (если вы не собираетесь их сохранять)

0 голосов
/ 20 июня 2019

Прежде всего, вам нужно сделать хороший урок о SharedPreference. Официальный хорошо сделано: введите описание ссылки здесь В вашем случае pref, prefs и prefz абсолютно одинаковы, поэтому вам не нужно создавать 3 редактора. Кроме того, зачем получать оценки в настройках, чтобы вводить их сразу после. Так что, возможно, вы не очень хорошо выставили счет в sharedpreference и получили всегда 0. Вот почему tv_total_Score отображает 0.

Кроме того, нет необходимости использовать Double, если у вас есть только int. И назовите свои переменные в соответствии с соглашением о верблюде, избегайте подчеркивания.

0 голосов
/ 20 июня 2019

Попробуйте использовать Double.sum для суммирования двух двойных значений.

Пример:

Double.sum(0.08, 0.0491)
...