android SharedPreferences将整数传递给下一个活动

时间:2015-03-16 16:12:43

标签: java android

我如何将textview中的整数值传递给下一个活动? 目前我正在使用字符串作为我的共享偏好,每次我将它更改为int我的app force close。

这是我在mainactivity上的代码

int scoreText=50;
public static final String PREFS_COIN= "MyPreferenceFile";

protected void onCreate(Bundle savedInstanceState) {

    public void checkAnswer()
    {   String answer=answerText.getText().toString();  

        if(isCorrect(answer))
        {       

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("What are you a GENIUS?!");
            builder.setMessage("Nice one, Genius! You have P10!");
            builder.setIcon(android.R.drawable.btn_star);
            builder.setPositiveButton("View Trivia",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                scoreText+=10;
                scoreNew=scoreText;
                scoreTxt.setText(""+ scoreNew);
                SharedPreferences settings2=getSharedPreferences(PREFS_COIN, 0);
                SharedPreferences.Editor editor2=settings2.edit();
                editor2.putString("coins", scoreTxt.getText().toString());
                editor2.commit();
                Intent intent=new Intent(getApplicationContext(), Luzon1Trivia.class);
                startActivity(intent);
                overridePendingTransition(R.animator.transition_fade_in, R.animator.transition_fade_out);
                //startActivity(new Intent(Luzon1.this, Luzon2.class));

                ;} });
            AlertDialog alert = builder.create();
            alert.show(); // Show Alert Dialog
             scoreTxt.setVisibility(View.GONE);

            //disable all the buttons and textview
            answerText.setEnabled(false);
            answerButton.setClickable(false);       
                        }
  }

每当用户猜到正确答案时,都会给出+10硬币。问题是,在第二个活动中,我无法添加/减去共享偏好值,因为它声明为字符串。会发生什么是“60 +10”出现在textview

这是我在活动2中的代码

public static final String PREFS_COIN= "MyPreferenceFile";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.luzon2);

        scoreTxt = (TextView)findViewById(R.id.score);
        SharedPreferences settings2=getSharedPreferences(PREFS_COIN, 0);
        scoreTxt.setText(settings2.getString("coins", ""));

3 个答案:

答案 0 :(得分:2)

您不应该使用共享首选项在活动之间传递信息,共享首选项打算用于在销毁应用程序时存储持久性信息。

要在活动之间传递信息,您应该使用Intent(用于启动“命运”活动的相同意图)

Intent newActivityIntent = new Intent(originActivity.this, destinyActivity.class);
newActivityIntent.putExtra(KEY_STRING, integerValue);
this.startActivity(newActivityIntent);//Assuming you're starting an activity from another one

修改:还回复了herehere。我建议你在发帖前先搜索一下。

答案 1 :(得分:0)

只需使用静态变量即可。它实现起来要容易得多,因为所有你需要做的就是调用它而不是把它传递给像疯子这样的其他意图。

  public static int coins;  

要调用它,请使用您的类实例名称:

  MyClass.coins; 

添加:

MyClass.coins+=10;
scoreTxt.setText(Integer.toString(MyClass.coins));

MyClass 是您的班级。如果您的班级名为 MainActivity ,那么它将是(MainActivity)。

.coins 是该类中的变量,您只是引用该变量。

静态的好处是将它用作学习工具。这是探索实例和引用的好方法。

或者您可以将所有这些添加到每个活动中,并且不要忘记处理设备轮换:

Intent i = new Intent(getApplicationContext(), MyClass.class);
i.putExtra("coins","value");
startActivity(i);

要检索这些值:

Bundle extras = getIntent().getExtras();
if (extras != null) {
     coins = Integer.parseInt(extras.getString("coins"));
}

设置:

    coins+=10;
    scoreTxt.setText(coins);

设备轮换:Passing Extras and screen rotation

答案 2 :(得分:0)

您必须解析字符串并获取浮点/整数值。

int myNewInt = Integer.parseInt("theString");

在你的情况下你必须这样做:

int myNewInt = Integer.parseInt(settings2.getString("coins", ""));

我认为您需要在

中将默认值设置为0
settings2.getString("coins", "0")