【问题标题】:GetSerializableExtra returning nullGetSerializableExtra 返回 null
【发布时间】:2012-09-28 06:39:13
【问题描述】:

我需要一点帮助来解决以下问题。

我有两个活动,A 和 B。活动 A 为结果启动 B,B 向 A 发送回一个可序列化的对象。

活动a开始活动B:

    ...
    Intent intent = new Intent(MainActivity.this, ExpenseActivity.class);       
    startActivityForResult(intent, EXPENSE_RESULT);  
    ...

活动 B 向 A 发送数据:

    ...
    ExpensePacket packet = new ExpensePacket();
    ...
    Intent returnIntent = new Intent();
    returnIntent.putExtra(MainActivity.PACKET_INTENT,packet);
    setResult(RESULT_OK,returnIntent);     
    finish();

Activity A 获取 B 发送的数据的点:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == EXPENSE_RESULT) {
        if(resultCode == RESULT_OK){                
            ExpensePacket result = (ExpensePacket)getIntent().getSerializableExtra(PACKET_INTENT);

            wallet.Add(result);
            PopulateList();
        }
        else{
             //Write your code otherwise
        }
    }
}    

我的 Serializable 对象,从 B 发送到 A 的对象:

class ExpensePacket implements Serializable {

    private static final long serialVersionUID = 1L;    
    private Calendar calendar;  

    public void SetCalendar(Calendar aCalendar){
        calendar = aCalendar;
    }

    public Calendar GetCalendar(){
        return calendar;
    }

    public String GetMonthYear() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        sdf.format(calendar.getTime());                 

        String returnString = "";
        returnString += sdf.toString();
        returnString += "/";
        returnString += Functions.GetMonthName(calendar);

        return sdf.toString();
    }   
}

有人可以帮我弄清楚为什么从 B 发送到 A 的数据是空指针。

【问题讨论】:

  • 显示数据的代码在哪里null
  • 调试代码我注意到onActivityResult方法中的变量result始终为null。
  • A 真的叫MainActivity 吗?我要求确保onActivityResult() 中的PACKET_INTENTB 中的MainActivity.PACKET_INTENT 相同。
  • 我是一个 Android 菜鸟,最近才实现了类似的东西。我认为您在此处发布的代码没有任何问题。在调用putExtra() 之前,您是否检查过packet 是否为非空?
  • @rodolfogomesdias,不要使用MainActivity.PACKET_INTENT,使用String,类似于“mySerializedObject”

标签: java android serialization android-activity


【解决方案1】:

我想我发现了你的错误:

在您的 onActivityResult() 方法中,您应该使用 Intent“数据”参数,而不是 getIntent() 方法。 getIntent() 返回的是用来调用 Activity 的 Intent,而不是 startActivityForResult() 调用的 Activity 返回的 Intent。

结果Intent是onActivityResult()中传入的“data”参数。您应该从那里恢复您的 Serializable 对象。

我用你的代码做了一个小项目,可以重现你的问题。使用 data 参数更改 getIntent() 解决了这个问题。

还有一件事:我认为您在 ExpensePacket.getMonthYear() 中还有另一个错误,因为您构造了 String returnString,但返回了其他内容。只需检查该部分,以确保您正在做您想做的事情。

【讨论】:

  • 你是对的人。确实是一个很好的分析和解释。谢谢。
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 2019-08-21
  • 2020-06-19
相关资源
最近更新 更多