首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回null的GetSerializableExtra

返回null的GetSerializableExtra
EN

Stack Overflow用户
提问于 2012-10-08 10:04:40
回答 1查看 4.8K关注 0票数 8

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

我有两个活动,A和B。活动A从B开始获取结果,B向A返回一个可序列化的对象。

活动A开始活动B:

代码语言:javascript
运行
复制
    ...
    Intent intent = new Intent(MainActivity.this, ExpenseActivity.class);       
    startActivityForResult(intent, EXPENSE_RESULT);  
    ...

活动B向A发送数据:

代码语言:javascript
运行
复制
    ...
    ExpensePacket packet = new ExpensePacket();
    ...
    Intent returnIntent = new Intent();
    returnIntent.putExtra(MainActivity.PACKET_INTENT,packet);
    setResult(RESULT_OK,returnIntent);     
    finish();

活动A获取从B发送的数据的点:

代码语言:javascript
运行
复制
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的对象:

代码语言:javascript
运行
复制
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的数据是空指针。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-08 17:56:42

我想我发现了你的错误:

在onActivityResult()方法中,应该使用Intent "data“参数,而不是getIntent()方法。getIntent()返回用于调用活动的意图,而不是由startActivityForResult()调用的活动返回的意图。

结果意图是在onActivityResult()中传递的"data“参数。你应该从那里恢复你的Serializable对象。

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

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12774499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档