【问题标题】:Android Java Passing values between activitiesAndroid Java 在活动之间传递值
【发布时间】:2018-10-08 19:58:16
【问题描述】:

我有 2 个活动。 两者都实现了surfaceview。 在第一个中,我有一个名为 score1 的变量,我想将 score1 中的值传递给第二个活动。

每次我运行应用程序时,它都会在完成第一个活动并尝试加载第二个活动后崩溃。在我编写代码以在第二个活动中获取额外的意图之前,一切都运行良好。

我的第一个活动有这个意图:

Intent intent = new Intent (myContext, PunchItActivity.class);
intent.putExtra("score_var", score1);
myContext.startActivity(intent);
((Activity) myContext).finish();

在我的第二个活动中,以下代码尝试获取 score1 变量的值:

Intent mIntent = ((Activity) myContext).getIntent();
int score1 = mIntent.getIntExtra("score_var", 0);
score1 *= molesWhacked + 10;
canvas.drawText("Score: " + Integer.toString(score1), 20, 160, blackPaint);

我不明白为什么每次活动一离开场景而活动二尝试渲染它的表面视图并显示来自 score1 的值时应用程序都会崩溃。

【问题讨论】:

  • 使用 LogCat 检查与您的崩溃相关的 Java 堆栈跟踪:stackoverflow.com/questions/23353173/…
  • LogCat 说:尝试在空对象引用上调用虚拟方法 'android.content.Intent android.app.Activity.getIntent()'
  • 这表明myContextnull。您可以考虑将完整源代码添加到问题的第二个活动中,或者至少足以显示您尝试在何处以及如何设置mContext

标签: java android android-intent parameter-passing


【解决方案1】:

在你的第一个活动中尝试这样:

Intent intent = new Intent (myContext, PunchItActivity.class);
        intent.putExtra("score_var", score1);
        myContext.startActivity(intent);
        //((Activity) myContext).finish();

【讨论】:

    【解决方案2】:

    问题是因为你的mContext是空的,所以你需要初始化它。

    如果您正在启动 Activity,则无需使用 mContext。您可以使用您的活动的this,如下所示:

    Intent intent = new Intent (this, PunchItActivity.class);
    intent.putExtra("score_var", score1);
    this.startActivity(intent);
    this.finish();
    

    如果您的代码在匿名类中,则使用类似的方法:

    Intent intent = new Intent (YourActivity.this, PunchItActivity.class);
    intent.putExtra("score_var", score1);
    YourActivity.this.startActivity(intent);
    YourActivity.this.finish();
    

    在您的第二个活动中,您不需要使用mContext 来使用getIntent() 方法,因为您只需要获取启动第二个活动的意图。意图已附加到第二个活动。因此,您需要将代码修改为以下内容:

    Intent mIntent = getIntent();
    int score1 = mIntent.getIntExtra("score_var", 0);
    score1 *= molesWhacked + 10;
    canvas.drawText("Score: " + Integer.toString(score1), 20, 160, blackPaint);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-16
      • 2015-04-19
      • 2014-12-08
      • 2012-08-29
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多