【问题标题】:Failure Delivering Results with HashMap between 2 activities在 2 个活动之间使用 HashMap 交付结果失败
【发布时间】:2014-08-12 15:21:51
【问题描述】:

背景:

  • 有两个活动
  • 1x (MainActivity), 1x (SubActivity - 带有 ListView 的 Activity)
  • Main Activity 扩展了 FragmentActivity,Infos 将在 Fragment 中使用
  • 当单击 MainActivity 的 MenuItem 时,将打开子活动。
  • 为 ListView 使用 HashMap

我的目标:

  • 应将单击项的 HashMap 值发送回 MainActivity,并且应关闭 SubActivity(带有 ListView)。

问题:

java.lang.RunTimeException: Failure delivering results ResultInfo{who=null, request=1, 
result=0, data=Intent { (has extras) }} to activity.

我认为我犯了一个巨大的错误,但我无法解决它。


onOptionsItemSelected 和 onActivityResult 的 switch case 在 MainActivity 中:

  • PICKED 的值为 1;

    switch (item.getItemId()) {

    case R.id.icon:
        Intent myIntent = new Intent(MainActivity.this, HeroListActivity.class);
        MainActivity.this.startActivityForResult(myIntent, PICKED);
        return true;
    default:
        return super.onOptionsItemSelected(item);
    } 
    
    
    
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 1) {
                Intent intent = getIntent();
                HashMap<String, String> aList = (HashMap<String, String>)intent.getSerializableExtra("map");
                Log.d("HashMap", aList.get("Name"));
            }
    

    }


onItemClick 在 SubActivity 中与 ListView:

  • onItemClick 正在工作,当我使用 Log.d 时,我从 HashMap 获得了正确的数据。

    HashMap<String, String> o = (HashMap<String, String>) adapter.getItemAtPosition(position);
    Log.d("onItemClick", ""+o);
    
    Intent intent = new Intent();
    
    intent.putExtra("map", o);
    setResult(RESULTS_OK, intent);
    finish();
    

我希望有人可以帮助我并提前致谢。

【问题讨论】:

  • 您确定不尝试将调用拆分为两个活动吗?听起来你的线程真的很紧张,不能同时做两件事。
  • @Eenvincible 我几个月前开始使用 android,所以我没有足够的经验来回答这个问题。但我愿意接受任何建议。
  • 尝试将 @Override 关键字添加到您的 onActivityResult() 方法 - 可能无法解决您的问题,但仍然是一个好习惯。
  • @notrix 在 onActivityResult() 方法之前已经有 @Override 并将其从我的帖子中删除,因为它破坏了布局。但是感谢您的评论。

标签: android android-intent hashmap onactivityresult


【解决方案1】:

您应该在 onActivityResult() 方法中替换这一行

 Intent intent = getIntent();

用这个:

 Intent intent = data;

data 是您传入的参数的名称 - 这是您的附加参数所在的位置。在这种情况下,getIntent() 调用返回 null 意图。

【讨论】:

  • 非常感谢,现在可以使用了。我还从 Hashmap 中获取了 Keys + Values 并将其保存到 String 中,然后就可以开始处理数据了。这是current onActivityResult version的Pastebin链接,因此其他用户可以获得工作代码。
猜你喜欢
  • 2011-07-11
  • 2021-10-15
  • 2018-03-15
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2016-05-17
  • 1970-01-01
相关资源
最近更新 更多