我正在尝试从不同的比赛水平构建得分卡。在android studio中
我尝试将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);
}
});
}
}
我尝试使用double并尝试使用int进行计算。但是我无法获得我三个等级的总和。
答案 0 :(得分:1)
首先,您遇到错字了:
editorz.putInt("scoreSAD", scoreSPAD);
应为:
editorz.putInt("scoreSPAD", scoreSPAD);
为避免将来出现此类错误,请考虑使用常量作为首选项键。
第二,您正在访问首选项以获取存储的值,然后再次进行中间存储而不更改它们。请注意,您首先显示结果的变量值,但在下一行中,使用首选项值的总和更新它。因此,您将始终为零
第三,您将它们作为首选项存储为int,但从视图中将它们存储为double,如果希望它们具有小数,请使用getDouble和putDouble方法。
第四,尽管我猜想您只是递归地调用ScoresActivity进行调试,但考虑使用Extras将参数传递给活动而不是使用首选项(如果您不打算保留它们)。
答案 1 :(得分:0)
首先,您需要做一个关于SharedPreference的很好的教程。官方的做得很好:enter link description here 在您的情况下,pref,prefs和prefz完全相同,因此您无需创建3个Editor。同样,为什么要检索偏好中的分数以在之后插入它们。 因此,也许您没有将分数很好地放在sharedpreference中,并且始终将其检索为0。这就是为什么tv_total_Score显示0的原因。
此外,如果您只有int,则无需使用Double。 并使用驼峰大小写约定命名变量,避免使用下划线。
答案 2 :(得分:-2)
尝试使用Double.sum
求和2个双精度值。
示例:
Double.sum(0.08, 0.0491)