GetSerializableExtra返回null

rod*_*ias 6 java serialization android android-activity

我需要一些帮助才能解决以下问题.

我有两个活动,A和B.活动A为结果开始B,B向A发送可序列化对象.

活动开始活动B:

    ...
    Intent intent = new Intent(MainActivity.this, ExpenseActivity.class);       
    startActivityForResult(intent, EXPENSE_RESULT);  
    ...
Run Code Online (Sandbox Code Playgroud)

活动B向A发送数据:

    ...
    ExpensePacket packet = new ExpensePacket();
    ...
    Intent returnIntent = new Intent();
    returnIntent.putExtra(MainActivity.PACKET_INTENT,packet);
    setResult(RESULT_OK,returnIntent);     
    finish();
Run Code Online (Sandbox Code Playgroud)

活动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
        }
    }
}    
Run Code Online (Sandbox Code Playgroud)

我的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();
    }   
}
Run Code Online (Sandbox Code Playgroud)

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

ete*_*nay 9

我想我发现了你的错误:

在onActivityResult()方法中,您应该使用Intent"data"参数,而不是getIntent()方法.getIntent()返回用于调用Activity的Intent,而不是startActivityForResult()调用的Activity返回的Intent.

结果Intent是onActivityResult()中传递的"data"参数.您应该从那里恢复Serializable对象.

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

还有一件事:我认为你在ExpensePacket.getMonthYear()中有另一个错误,因为你构造了String returnString,但返回别的东西.只检查那部分,以确保你正在做你想要的.