Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 android SharedReferences将整数传递给下一个活动_Java_Android - Fatal编程技术网

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

Java android SharedReferences将整数传递给下一个活动,java,android,Java,Android,如何将整数值从textview传递到下一个活动? 目前我使用字符串作为我的共享参考,每次我将其更改为int我的应用程序强制关闭 这是我在mainactivity上的代码 int scoreText=50; public static final String PREFS_COIN= "MyPreferenceFile"; protected void onCreate(Bundle savedInstanceState) { public void checkAnswer()

如何将整数值从textview传递到下一个活动? 目前我使用字符串作为我的共享参考,每次我将其更改为int我的应用程序强制关闭

这是我在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硬币。问题是,在第二个活动中,我无法添加/减去SharedReference值,因为它声明为string。此时“60+10”出现在文本视图中

这是我在活动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", ""));

只需使用一个静态变量来保存它。它更容易实现,因为您所要做的就是调用它,而不是像疯子一样将它传递给其他意图

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

设备旋转:

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

int myNewInt = Integer.parseInt("theString");
在您的情况下,您必须:

int myNewInt = Integer.parseInt(settings2.getString("coins", ""));
我认为您需要将默认值设置为0

settings2.getString("coins", "0")

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

要在活动之间传递信息,应使用(与启动“destiny”活动的意图相同)


编辑:这一点也已得到回答。我建议您在发布问题之前进行搜索。

在Android环境下,这不是一个很好的答案,在Android环境下,您可以将看似持续的内容传递给用户,但后续部分可能会发生,或者在从未初始化的新流程中继续。我应该将MyClass.coins放在哪里@Pucckat19-不要。这不是解决你问题的好办法。它可以在一些高级用途中发挥作用,但让它可靠地工作会增加不必要的复杂性,而这是你的简单需求所不能证明的。按照Sherekan的建议,传递一个额外的意图。只需在父活动(MainActivity)中初始化这个“MyClass.coins”,或者不管您的名字是什么@克瑞斯特拉顿:静态变量没有错:@Petro-no,这正是这种方法的错所在。您假设父活动将在当前进程中运行,这在Android上是一个完全不安全的假设,Android可以在没有警告的情况下杀死持有该活动的进程,并在另一个进程中运行后续活动。静态变量在Android上确实有合法的用途,但只有那些了解它们带来的复杂性的人才能使用!到目前为止,在所有的提议中,这一个最能说明Android是如何工作的。但是如果我不使用SharedReferences,用户获得的硬币将被重置。我说得对吗?我想做的是存储用户获得的硬币,然后在活动中传递硬币。这正是Intent extras的目的。另一方面,如果您希望用户生成一枚硬币,并在明天或下周左右仍保留它,则使用共享首选项。只有当活动被销毁时,第一个活动中的值才会被擦除,但活动销毁与应用程序销毁不同,您需要将该值存储在中的捆绑包中“onSaveInstanceState(Bundle outState)”方法(此处的文档:)。例如,如果允许用户返回原始活动(可能已被销毁以释放内存),则可能需要此行为并且需要原始硬币价值。是的,需要这样的东西才能使当前机制工作,尽管当前机制不是解决最终问题的最佳方法。我的应用程序已停止:(@Pucckat19-这是一个毫无用处的问题报告。除非你识别出实际的错误消息,否则没有人能帮你。对不起。但每次我使用Integer.parseInt时,我的应用程序都会保持强制关闭。如果你想在Android上开发,你必须学会如何使用logcat工具来了解你的应用程序为什么强制关闭。除非你这样做,否则你不会成功能够提出能够带来真正调试帮助的问题。
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