简体   繁体   English

如何使用 SharedPreferences 在 Android 上的活动之间传递数据?

[英]How to pass data between activities on Android with SharedPreferences?

I want to save and load game score from activity 1 (SummaryActivity.java) to activity 2 (LevelSelect.java).我想将游戏分数从活动 1 (SummaryActivity.java) 保存并加载到活动 2 (LevelSelect.java)。 So some button will visible when some score reached.因此,当达到某个分数时,某些按钮将可见。 I try this method but doesn't work.我尝试了这个方法,但没有用。

How to implement SharedPreferences for this different activities?如何为这些不同的活动实现 SharedPreferences?

SummaryActivity.java is a class when finished playing the game. SummaryActivity.java 是游戏结束时的类。

I used int result for pass data from SummaryActivity.java to LevelSelect.java and not work.我使用int result将数据从SummaryActivity.java传递到LevelSelect.java并且不起作用。

I want to send this score to other activity (LevelSelect.java) with SharedPreferences, so I can make some level with buttons.我想使用 SharedPreferences 将此分数发送到其他活动 (LevelSelect.java),这样我就可以使用按钮制作一些关卡。

Default buttons for level 2 until level 10 are invisible (gone), and after score reached more than 700 pts, I want to make that buttons visible.级别 2 到级别 10 的默认按钮不可见(消失),并且在分数达到 700 分以上后,我想让这些按钮可见。 So player can play with higher level.所以玩家可以玩更高的水平。

But, when i change result to 800 (with number), this code is work well.但是,当我将结果更改为800 (带数字)时,此代码运行良好。 I don't know why result not work.我不知道为什么结果不起作用。

That result not save the score.那个结果不能保存分数。 But work fine if I used Google Leaderboard.但是如果我使用 Google 排行榜,效果会很好。

This is SummaryActivity.java:这是SummaryActivity.java:

int result;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.summary);

    SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor=saved_values.edit();
         editor.putInt("level1", result);
         editor.apply();
mclient = getApiClient();

    if(mclient.isConnected())
       {
    Games.Leaderboards.submitScore(getApiClient(),
         getString(R.string.leaderboard_level_1),
         result); // this result is work

       }
}

private void displaySummary()
{
    String summary = getString(R.string.answered)
            + " " + mCorrectAnswers
            + " " + getString(R.string.of)
            + " " + mTotalQuestions
            + " " + getString(R.string.questions_correctly);

    mSummaryText.setText(summary);

    int score = (int)(((double)mCorrectAnswers / (double)mTotalQuestions) * 1000); // this is score

    result = (score);

    mScoreText.setText(score + ""); 
    }

This is LevelSelect.java:这是 LevelSelect.java:

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

    SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(this);
    count = saved_values.getInt("level1", 0);

    // This button is not visible by default.
    // I want to make it visible when result score reached 700 pts
    Button level2Button = (Button) findViewById(R.id.level2Button);
    level2Button.setOnClickListener (new View.OnClickListener() {
        public void onClick(View v) {
            Sound.playButtonSelect();
            Intent i = new Intent(getApplicationContext(),L2_MainActivity.class);
            startActivity(i);
            finish();
        }
    });

    if (count > 700)
    {
        level2Button.setVisibility(View.VISIBLE);
    }

This is for the button:这是按钮:

<Button
        android:id="@+id/level2Button"
        style="@style/FeedbackButton"
        android:layout_height="40dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginBottom="10dp"
        android:visibility="gone"
        android:text="@string/level2" />

SOLVED.解决了。 This is my new SummaryActivity.java:这是我的新 SummaryActivity.java:

int result;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.summary);


mclient = getApiClient();

    if(mclient.isConnected())
       {
    Games.Leaderboards.submitScore(getApiClient(),
         getString(R.string.leaderboard_level_1),
         result); // this result is work

       }
}

private void displaySummary()
{
    String summary = getString(R.string.answered)
            + " " + mCorrectAnswers
            + " " + getString(R.string.of)
            + " " + mTotalQuestions
            + " " + getString(R.string.questions_correctly);

    mSummaryText.setText(summary);

    int score = (int)(((double)mCorrectAnswers / (double)mTotalQuestions) * 1000); // this is score

    result = (score);

    mScoreText.setText(score + ""); 

SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor=saved_values.edit();
         editor.putInt("level1", result);
         editor.apply();
    }

Change改变

int myIntValue = sp.getInt("result", 0);

To

int myIntValue = sp.getInt("level1", 0);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM