Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跨多个活动共享数据引用_Java_Android_Sharedpreferences - Fatal编程技术网

Java 跨多个活动共享数据引用

Java 跨多个活动共享数据引用,java,android,sharedpreferences,Java,Android,Sharedpreferences,首先,我很抱歉,如果这是一个重复,我搜索,并没有找到答案 我试图在多个活动中保持分数。用户启动MainActivity,选择要回答的问题并重定向到该活动。用户获得正确答案将获得一分,并返回Main活动以选择新问题 它可以正确地为问题打分,但不会在问题之间保存分数 主要活动 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCon

首先,我很抱歉,如果这是一个重复,我搜索,并没有找到答案

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

它可以正确地为问题打分,但不会在问题之间保存分数

主要活动

@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(每个问题的逻辑都相同。只需单击按钮即可运行)

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

***编辑****

这是调用分数的按钮,它仍然只计算6分中的1分

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));
            }
        });
```

```
在此之后,您应该保存用户点。也许你忘了。

代码实际上有一些地方出了问题。首先,您将在
main活动中保存
分数
,或者读取分数。您正在
submitAnswer
中读取
分数
,或者编辑分数

在处理
SharedReferences
时,我通常比较悲观,因此我会检查该键是否已设置为
contains()

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

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);
}

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

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);
}

在Q1中,In think是您想要更新值的地方,不是吗?您当前在Main中执行
put
,而在Q1活动中执行的
get
似乎应该被反转。@Deb::请注意,通过使用
finish()
方法,您将返回到
Main活动
活动,但不会触发
onCreate()
方法。相反,返回点将是
onResume()
方法。请看一下Android活动生命周期@Deb::看一下对onCreate()方法的更改。这将在第一次初始化分数。我已经测试了这段代码,对我来说它工作正常。@Deb:如果它解决了您的问题,请将此答案标记为已接受的答案以结束问题;)非常感谢你。我知道我忘了什么。
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();
    }
}
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);
}
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);
}