Android getIntent()。getExtras()。getParcelable()返回一个空Object

时间:2012-12-01 18:29:36

标签: android android-intent android-fragmentactivity

我正在尝试从一个FragmentActivity向另一个FragmentActivity发送一个Parcelable对象。

发送活动:

Intent intent = new Intent(this, ActivityToSendTo.class);
intent.putExtra("key", objectToSend);
startActivity(intent);

如果我此时插入一个断点,我可以看到'objectToSend'被填充,属性包含数据。

接收活动:

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    if(savedInstanceState == null) {
        FragmentComments fragment = new FragmentComments();
        fragment.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction().add(android.R.id.content, fragment).commit();
    }
}

如果我在onCreate方法中插入断点并尝试查看objectToSend,我可以看到它存在,但该对象上的所有属性现在都为null。

还有其他人经历过这个吗?我认为它可能是新支持库中的一个错误吗?

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

我了解FragmentComments是您要传递给其他Activity的类。 如果是这种情况,则检索对象的代码应该看起来或多或少:

Parcel parcel = (Parcel)getIntent().getParcelableExtra("key");

还要确保FragmentComments正确实现Parcelable接口。有关该主题的更多信息,请访问android.developer.com,HERE

答案 1 :(得分:0)

你的objectToSend是否从另一个班级延伸?如果是writeToParcel()方法,请致电super.writeToParcel()并传递您拥有的参数。然后在构造函数中,确保它接受一个Parcel对象并调用super()构造函数。所以这两种方法看起来像

protected ObjectToSend(Parcel in){
    super(in);
    someNum = in.readInt();
}

@Override
public void writeToParcel(Parcel dest, int flags){
    super.writeToParcel(dest, flags);
    dest.writeInt(someNum);
}

我遇到了同样的问题,这就解决了!希望它有所帮助!