使用Serializable通过意图传递数据

79

我已经使用了serializable在我的类中,但它仍然无法正常工作。

这是我的类:

package com.ursabyte.thumbnail;

import java.io.Serializable;

import android.graphics.Bitmap;

public class Thumbnail implements Serializable {

    private static final long serialVersionUID = 1L;
    private String label = "";
    private Bitmap bitmap;

    public Thumbnail(String label, Bitmap bitmap) {
        this.label = label;
        this.bitmap = bitmap;
    }

    public void set_label(String label) {
        this.label = label;
    }

    public String get_label() {
        return this.label;
    }

    public void set_bitmap(Bitmap bitmap) {
        this.bitmap = bitmap;
    }

    public Bitmap get_bitmap(){
        return this.bitmap;
    }

    //  @Override
    //  public int compareTo(Thumbnail other) {
    //      if(this.label != null)
    //          return this.label.compareTo(other.get_label());
    //      else
    //          throw new IllegalArgumentException();
    //  }

}

这就是我想要传递的内容。

List<Thumbnail> all_thumbs = new ArrayList<Thumbnail>();
all_thumbs.add(new Thumbnail(string, bitmap));
Intent intent = new Intent(getApplicationContext(), SomeClass.class);
intent.putExtra("value", all_thumbs);

但是它仍然不起作用。我不知道如何使用Parcelable,所以我使用了这个代替。


2
Bitmap类没有实现Serializable接口。你需要在这里使用Parcelable。然而,使用Parcelable传递位图不是一个好主意... - Vladimir Mironov
字节数组怎么样?它是否实现了Serializable接口? - Bias Tegaralaga
是的,但要小心大对象。意图对于附加信息有大小限制。 - Vladimir Mironov
你可以在bitmap前面加上transient,像这样: private transient Bitmap bitmap; - noone
13个回答

0

如果你来到这里是因为你已经尝试了所有方法,但在切换活动时你的应用程序仍然崩溃:

我的问题出在我的ParentClass中使用了另一个类的对象,而我忘记实现Serializable接口。

public class A implements Serializable {
    
        private B[][] b;
    
}

public class B implements Serializable { //forgot this implementation

    B(){
    }

}

0

当我通过意图发送 List<MySerializableObject> 时,我使用以下方法:

List<Thumbnail> thumbList = new ArrayList<>();
//Populate ...

Intent intent = new Intent(context, OtherClass.class);
intent.putExtra("ThumbArray", thumbList.toArray(new Thumbnail[0]));
//Send intent...

并且可以像这样检索它:

Thumbnail[] thumbArr = (Thumbnail[]) getIntent().getSerializableExtra("ThumbArray");
if (thumbArr != null) {
    List<Thumbnail> thumbList = Arrays.asList(thumbArr);
}

0

1- 您正在使用 android.graphics.Bitmap,它没有实现 Serializable 类,所以您必须删除该类,然后它才能正常工作。

2- 简要地说,您可以访问如何在意图之间传递数据


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接