onActivityResult中的数据为空。

24

我正在尝试创建一个简单的 Android 应用程序。我有两个活动(AB)。在 B 中,我只想选择一个 date

我启动 A 并执行以下操作:

 Intent intent = new Intent();
 intent.setClass(this, B.class);
 startActivityForResult(intent,1);

然后,在B中,我执行:

 Intent intent = getIntent();
 setResult(RESULT_OK);
 intent.putExtra("Date",dateSelected);
 finish();

而且,在A中,我有以下方法:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if(resultCode==RESULT_OK && requestCode==1){
        Bundle bundle = getIntent().getExtras();
        String aux = bundle.getString("nuevo");
        .....
    }

但是databundle都是null。当我调试代码时,在B类中,intentExtras,但是当我调用finish()并返回到A类时,这个intent就不可访问了。

我该如何解决这个问题?


1
在Activity B中的键名与Activity A中的onActivityResult()方法中的键名不同,这是有原因的吗? - Siddharth Lele
3个回答

54

尝试这个:

然后,在B中我做如下操作:

Intent intent = getIntent();
intent.putExtra("Date",dateSelected);
setResult(RESULT_OK, intent);
finish();

而且,在A中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == RESULT_OK && requestCode==1) {
        Bundle MBuddle = data.getExtras();
        String MMessage = MBuddle.getString("Date");
    }
}

2
谢谢!我需要更改setResult(RESULT_OK, intent)。这很容易,但我是Android编程的新手。 - Nobelisco
1
@Nobelisco:没关系,朋友,欢迎随时提问。如果您有其他问题,请在评论区留言。 - ρяσѕρєя K
setResult(RESULT_OK, intent); 这对我很有帮助。 - Vinoj John Hosan
我正在按照你的答案所说的做,即使我得到的data.getData()为null... - Deepak Kumar
仍在接收 null。 - Fernando Torres
我正在做同样的事情,我看到意图数据的mMap与我放置的键值对一致。但是当我回到A的onActivityResult时,我发现意图数据->Extras->mMap为空。 - user5538841

8
A 的 onActivityResult 方法中。
   if(null!=data){

    Bundle bundle = data.getExtras();
    String mydate = bundle.getString("Date");

   }

并且在B

Intent returnIntent = new Intent();
returnIntent.putExtra("Date",dateSelected);
setResult(RESULT_OK,returnIntent);      
finish();

+1 @SamirMangroliya 这取决于 Nobelisco 是否接受答案。 - ρяσѕρєя K
1
我对此没有任何问题,但有时我会接受和取消接受,然后再接受和取消接受!!! 哈哈... - Samir Mangroliya
抱歉,我更改了我的选择,因为我认为另一个答案更明确。你的答案确实更早,但是那时我没有看到它。我试图选择两个答案,但这是不可能的。感谢您的帮助,如果我做错了什么,请原谅。 - Nobelisco

2
我知道这个问题已经有了答案,但为了更好地解释错误,您之前使用了 getIntent() 而不是在回调中接收到的 data 元素。 getIntent() 返回最初用于打开活动A的意图(可能是您打开应用程序或来自另一个活动),而 data活动B作为响应参数返回的意图。
另外,在活动B中,您使用了 getIntent() 而不是创建一个新的 Intent 并将其返回给 Activity A。
Intent returnIntent = new Intent();

最后,创建的意图必须添加到 setResult 中。
setResult(RESULT_OK,returnIntent);  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接