首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨多个活动的SharedPreferences

跨多个活动的SharedPreferences
EN

Stack Overflow用户
提问于 2018-05-31 01:20:04
回答 3查看 75关注 0票数 0

首先,我很抱歉,如果这是一个副本,我搜索,但没有找到答案。

我试图在多个活动中保持得分。用户从MainActivity开始,选择要回答的问题,然后重定向到该活动。用户将获得一个正确答案的积分,并返回给MainActivity以选择一个新的问题。

它是正确评分的问题,但它没有保存之间的问题得分。

主活性

代码语言:javascript
复制
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    SharedPreferences settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);

    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("score", userPoints);
    editor.commit();


};

Q1(每个问题的逻辑相同)。它运行时按一下按钮)

代码语言:javascript
复制
private SharedPreferences settings;
private int userPoints;
private int points;
 public void submitAnswer (View view) {

    if (correctAnswer.isChecked()) {
        userPoints = userPoints + 1;
    } else {
        userPoints = userPoints;
    }

    settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
    points = settings.getInt("score", userPoints);

    Toast.makeText(this, "Answer saved", Toast.LENGTH_SHORT).show();
    Intent intent = new Intent(Q1.this, MainActivity.class);
    startActivity(intent);
}

我对这件事很陌生,我知道我错过了一些东西,我只是不知道它是什么。任何帮助都是非常感谢的。

编辑*

这是呼叫得分的按钮,它仍然只计算6分中的1个。

代码语言:javascript
复制
private int userPoints;
TextView pointsAwarded;
ImageButton home;
Button check;
int points;
SharedPreferences settings;    

check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
                points = settings.getInt("score", userPoints);

                pointsAwarded.setText(String.valueOf(points));
            }
        });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-31 01:48:34

实际上,代码有一些错误。首先,您要将score保存在MainActivity中,而不是阅读它。您正在以score代替submitAnswer阅读或编辑它。

在处理SharedPreferences时,我通常是悲观的,所以我检查键是否已经用contains()设置了。

代码语言:javascript
复制
private int points;

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

    SharedPreferences settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
    if(settings.contains("score"){
        points = settings.getInt("score", userPoints);
    }
    else{
        Log.e(TAG, "No score yet!");

        SharedPreferences.Editor editor = settings.edit();
        editor.putInt("score", 0);
        editor.commit();
    }
}

现在,在问题活动中,您可以从SharedPreferences读取当前点,并更新值并保存回SharedPreferences

代码语言:javascript
复制
public void submitAnswer (View view) {
    if (correctAnswer.isChecked()) {
        SharedPreferences settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
        if(settings.contains("score"){
            int points = settings.getInt("score", 0);
            points++;

            SharedPreferences.Editor editor = settings.edit();
            editor.putInt("score", points);
            editor.commit();
            Toast.makeText(this, "Answer saved : points = " + points, Toast.LENGTH_SHORT).show();
        }
        else{
            Log.e(TAG, "No score yet!");
        }
    } 
    else{
            Toast.makeText(this, "Wrong Answer", Toast.LENGTH_SHORT).show();
    }

    // There is no need to start the MainActivity through a new Intent just call finish();
    finish();
    //... and you return to the Activity that is at the top of the stack.

    //Intent intent = new Intent(Q1.this, MainActivity.class);
    //startActivity(intent);
}
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 01:31:20

代码语言:javascript
复制
```javascript

if (correctAnswer.isChecked()) {

userPoints = userPoints + 1;}

代码语言:javascript
复制
```     after this , u should save userPoints. maybe you forget.
票数 0
EN

Stack Overflow用户

发布于 2018-05-31 05:11:39

您必须将当前用户点添加到保存点中,然后在添加后保存它:

代码语言:javascript
复制
private SharedPreferences settings;
private int userPoints;
private int points;
public void submitAnswer (View view) {

if (correctAnswer.isChecked()) {
    userPoints = userPoints + 1;
} else {
    userPoints = userPoints;
}

settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
points = settings.getInt("score", userPoints);

userPoints = userPoints + points ; // addition of current userpoints with saved points 

  // Now save this points 
  SharedPreferences.Editor editor = settings.edit();
  editor.putInt("score", userPoints );
  editor.commit();

Toast.makeText(this, "Answer saved", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Q1.this, MainActivity.class);
startActivity(intent);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50615347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档