首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Parcelable传输失败

Parcelable传输失败
EN

Stack Overflow用户
提问于 2013-12-01 21:27:26
回答 3查看 374关注 0票数 2

我正在尝试我的第一个Parcelable传输,它不是很好。这是我的Parcelable类:

代码语言:javascript
运行
复制
public class Element implements Parcelable, Serializable {
    private static final long serialVersionUID = 1L;
    String name;
    String id;
    byte[] password;

    public static final Parcelable.Creator<Element> CREATOR = new Parcelable.Creator<Element>() {

        public Element createFromParcel(Parcel source) {
            return new Element(source);
        }

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

    };

    private Element(Parcel in){
        name = in.readString();
        id = in.readString();
        password = new byte[in.readInt()];
        in.readByteArray(password);
    }
    public Element(String name,String id,byte[] password){
        this.name=name;
        this.id=id;
        this.password=password;
    }

    @Override
    public String toString() {
        return name;
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(id);
        dest.writeInt(password.length);
        dest.writeByteArray(password);
    }

}

如您所见,它是一个简单的Parcelable,包含2个String字段和1个byteArray。

现在,我通过我的主要活动将其发送到第二个活动:

代码语言:javascript
运行
复制
            //Inside the main activity
            Intent i = new Intent(MainActivity.this, DisplayActivity.class);
            i.putExtra("element", (Parcelable)adapter.getItem(pos));
            startActivity(i);

然后,我在第二个活动中接收到Parcelable:

代码语言:javascript
运行
复制
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.display);

        Element e = getIntent().getExtras().getParcelable("element");
        //this line makes my app crash. No idea why.
EN

回答 3

Stack Overflow用户

发布于 2013-12-01 21:36:10

这样试试:

代码语言:javascript
运行
复制
Element obj = new Element();

//set your data here before send

Intent i = new Intent(this, MyActivity.class);
i.putExtra("com.package.Element", obj);

startActivity(i);

然后检索它:

代码语言:javascript
运行
复制
public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle b = getIntent().getExtras();
        Element obj = b.getParcelable("com.package.Element");
    }

}
票数 0
EN

Stack Overflow用户

发布于 2014-01-11 01:12:49

我也在为同样的问题而挣扎。在MyActivity活动的清单中添加:

代码语言:javascript
运行
复制
android:launchMode="singleTop"

它为我解决了这个问题。

代码语言:javascript
运行
复制
<activity android:name="com.example.myapp.MyActivity"
android:label="@string/title_myactivity"
android:launchMode="singleTop">
</activity>
票数 0
EN

Stack Overflow用户

发布于 2015-07-01 19:07:18

为什么要同时实现Parcelable和Serializable?

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

https://stackoverflow.com/questions/20312611

复制
相关文章

相似问题

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