首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getParcelableArrayList返回空

getParcelableArrayList返回空
EN

Stack Overflow用户
提问于 2014-03-28 14:02:01
回答 1查看 2.2K关注 0票数 5

我有一个自定义类的ArrayList要从一个活动传递到另一个活动。我让这个类实现Parcelable。但是,每次使用传递的ArrayList时,都会得到NullPointException。因此,我决定检查getParcelableArrayList()的返回值的类,并得到java.lang.Integer。我想知道怎么解释这件事。

第一次活动的代码:

代码语言:javascript
复制
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(this, WeiboBrowseActivity.class);
    intent.putParcelableArrayListExtra(WeiboBrowseActivity.KEY_WEIBO_INFO_LIST, weiboInfoList);
    intent.putExtra(WeiboBrowseActivity.KEY_SELECTED_WEIBO_INDEX, arg2);
    startActivity(intent);
    overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

第二个活动的代码:

代码语言:javascript
复制
private void initWeiboInfos() {
    Log.d("cosmo","the type is: " + getIntent().getExtras().get(KEY_WEIBO_INFO_LIST).getClass().getName());
    weiboInfos = getIntent().getExtras().getParcelableArrayList(KEY_WEIBO_INFO_LIST);
    if (weiboInfos == null) {
        Log.d("cosmo", "weiboInfos null");     //I got this log
    } else {
        Log.d("cosmo", "weiboInfos not null");
    }
}

Parcelable类的代码:

代码语言:javascript
复制
public class WeiboInfo implements Parcelable {
    private String absolutePath;
    private long createTimestamp;

    public WeiboInfo() {
        super();
        this.setAbsolutePath("");
        this.setCreateTimestamp(new Date().getTime());
    }

    public WeiboInfo(String absolutePath, long createTimestamp) {
        super();
        this.setAbsolutePath(absolutePath);
        this.setCreateTimestamp(createTimestamp);
    }

    public WeiboInfo(Parcel in) {
        super();
        this.setAbsolutePath(in.readString());
        this.setCreateTimestamp(in.readLong());
    }

    public String getAbsolutePath() {
        return absolutePath;
    }

    public void setAbsolutePath(String absolutePath) {
        this.absolutePath = absolutePath;
    }

    public long getCreateTimestamp() {
        return createTimestamp;
    }

    public void setCreateTimestamp(long createTimestamp) {
        this.createTimestamp = createTimestamp;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub
        dest.writeString(absolutePath);
        dest.writeLong(createTimestamp);
    }

    public void readFromParcel(Parcel in) {
        absolutePath = in.readString();
        createTimestamp = in.readLong();
    }

    public static final Parcelable.Creator<WeiboInfo> CREATOR = new Parcelable.Creator<WeiboInfo>() {
        public WeiboInfo createFromParcel(Parcel in) {
            return new WeiboInfo(in);
        }

        public WeiboInfo[] newArray(int size) {
            return new WeiboInfo[size];
        }
    };
}

这是两把钥匙:

代码语言:javascript
复制
    public static final String KEY_WEIBO_INFO_LIST = "KEY_WEIBO_INFO_LIST";
    public static final String KEY_SELECTED_WEIBO_INDEX = "KEY_WEIBO_INFO_LIST";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 14:05:04

代码语言:javascript
复制
public static final String KEY_WEIBO_INFO_LIST = "KEY_WEIBO_INFO_LIST";
public static final String KEY_SELECTED_WEIBO_INDEX = "KEY_WEIBO_INFO_LIST";

它就像一本字典。你不能有重复的钥匙。这就是为什么你要得到整数,因为这里

代码语言:javascript
复制
intent.putParcelableArrayListExtra(WeiboBrowseActivity.KEY_WEIBO_INFO_LIST, weiboInfoList);
 intent.putExtra(WeiboBrowseActivity.KEY_SELECTED_WEIBO_INDEX, arg2);

后者凌驾于前者之上。换进去

代码语言:javascript
复制
public static final String KEY_WEIBO_INFO_LIST = "KEY_WEIBO_INFO_LIST";
public static final String KEY_SELECTED_WEIBO_INDEX = "KEY_SELECTED_WEIBO_INDEX";
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22715004

复制
相关文章

相似问题

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