【问题标题】:bundles to MainActivity.java捆绑到 MainActivity.java
【发布时间】:2018-08-18 17:35:06
【问题描述】:

所以我在主要活动中有一个回收器视图,一旦我点击一个元素,我就可以转到另一个屏幕并使用捆绑包发送信息(例如单击的回收器视图中的元素名称)。这一切都很好。

现在我正在尝试返回主要活动并将信息发送到将在 Toast 中显示的主要活动

这是我要返回的第二个活动的一部分

public void onClick(View view) {
                String text1 = "";
                Bundle bundle = new Bundle();
                bundle.putString("xyz1",editText.getText().toString());


                Intent returnIntent = new Intent(view.getContext(),MainActivity.class);
                returnIntent.putExtras(bundle);
                view.getContext().startActivity(returnIntent);
            }

这就是我在主要活动中在 oncreate 方法中检索它的内容

//Bundle bundle = this.getIntent().getExtras();
        //String value = bundle.getString("xyz1");
        //Toast.makeText(this,value,Toast.LENGTH_SHORT).show();

我已对其进行了评论,因为它崩溃了。我的猜测是它崩溃了,因为程序第一次启动时,没有 bundle ,没有来自第二个活动的信息。

我可以反过来做(从主要活动到第二个活动)

如何解决这个问题?

【问题讨论】:

  • 你能给我们看看崩溃日志吗?
  • @vinnie 我在哪里看到的?抱歉,100% 是 Android 新手
  • 在 Android Studio IDE 的底部,查找 Logcat 选项卡。一旦您的应用程序崩溃并且您在设备/模拟器上按“关闭应用程序”,您将看到崩溃数据的转储。如果是异常,一般会用红色字体。
  • 如果您在 IDE 底部没有看到 Logcat 选项卡,请转到 View --> Tool Windows --> Logcat 以显示它

标签: android android-intent android-recyclerview bundle


【解决方案1】:

在访问包中的参数之前尝试执行空检查。

private static final String EXTRA_MY_STRING = "xyz1";

if (getIntent().getExtras() != null)
{
    Bundle extras = getIntent().getExtras();
    String value = extras.getString(EXTRA_MY_STRING);
    if (!TextUtils.isEmpty(value))
    {
       // show Toast
    }
}

此外,发布 logcat 有助于我们查看崩溃的根源。

【讨论】:

    【解决方案2】:

    您可以通过几种不同的方式对其进行归档,

    你的 FirstActivity(不清楚活动的名称是什么)你应该这样使用它。

    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    EditText nameText = (EditText) findViewById(R.id.query_textbox);
    intent.putExtra("key", nameText.getText());
    startActivity(intent);
    

    这是我解决问题的方法。我认为它的格式最好,并且可能正在阅读您的代码的其他人很容易理解(遵循良好的编程格式)

    然后在您的 SecondActivity.class (我认为在您的情况下应该是 MainActivity.class)

    Bundle extras = getIntent().getExtras();
       if (extras != null) {
            String extraStr = extras.getString("key");
        }else {
            extraStr = "extra not set";
        }
    

    如果你想使用格式良好的代码,它应该是这样的

    Intent intent = getIntent();
    // Get the extras (if there are any)
    Bundle extras = intent.getExtras();
    if (extras != null) {
        if (extraStr.containsKey("key")) {
            String extraStr = extras.getString("key");
            // TODO: Do something.
        }
    }
    

    或者也可以使用 Intent 方法直接访问您的附加功能。

    String extraStr = getIntent().getExtras("key");
    

    我将在此处附上一些参考资料,如果您愿意,它们将帮助您对此有更多了解。谢谢。

    参考文献http://ausmarton.blogspot.com/2014/01/bundle-containskey-but-returns-null-on.html

    https://www.codota.com/code/java/methods/android.os.Bundle/containsKey

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2017-08-04
      • 2017-11-20
      • 1970-01-01
      • 2012-06-21
      • 2013-12-06
      • 1970-01-01
      相关资源
      最近更新 更多