使用Serializable传递数据

我已经实现了我的类与可序列化,但它仍然无法正常工作。

这是我的class级:

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,所以我用这个来代替。

尝试使用Bundle.Serializable来传递可序列化的列表:

 Bundle bundle = new Bundle(); bundle.putSerializable("value", all_thumbs); intent.putExtras(bundle); 

并在SomeClass活动得到它:

 Intent intent = this.getIntent(); Bundle bundle = intent.getExtras(); List<Thumbnail> thumbs= (List<Thumbnail>)bundle.getSerializable("value"); 

此代码可以帮助您:

 public class EN implements Serializable { //... you don't need implement any methods when you implements Serializable } 

把数据。 用额外创build新的活动:

 EN enumb = new EN(); Intent intent = new Intent(getActivity(), NewActivity.class); intent.putExtra("en", enumb); //second param is Serializable startActivity(intent); 

从新活动中获取数据

 public class NewActivity extends Activity { private EN en; @Override public void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); if (extras != null) { en = (EN)getIntent().getSerializableExtra("en"); //Obtaining data } //... 

我扩展了K的答案,使其充分和可行的代码。 所以,当你填写你的“all_thumbs”列表时,你应该把它的内容一个接一个地放入这个包中,

 Bundle bundle = new Bundle(); for (int i = 0; i<all_thumbs.size(); i++) bundle.putSerializable("extras"+i, all_thumbs.get(i)); intent.putExtras(bundle); 

为了从意图获得额外的,你需要:

 Bundle bundle = new Bundle(); List<Thumbnail> thumbnailObjects = new ArrayList<Thumbnail>(); // collect your Thumbnail objects for (String key : bundle.keySet()) { thumbnailObjects.add((Thumbnail) bundle.getSerializable(key)); } // for example, in order to get a value of the 3-rd object you need to: String label = thumbnailObjects.get(2).get_label(); 

Serializable优点是它的简单性。 不过,我build议你在需要传输多个数据时考虑使用Parcelable方法,因为Parcelable是专门为Androiddevise的,比Serializable更有效率。 您可以使用以下命令创buildParcelable类:

  1. 一个在线工具 – parcelabler
  2. Android Studion插件 – Android Parcelable代码生成器
 Intent intent = new Intent(getApplicationContext(),SomeClass.class); intent.putExtra("value",all_thumbs); startActivity(intent); 

在SomeClass.java中

 Bundle b = getIntent().getExtras(); if(b != null) thumbs = (List<Thumbnail>) b.getSerializable("value"); 

创build你的自定义对象并实现Serializable。 接下来,你可以使用intent.putExtra(“package.name.example”)。

在第二个活动中,使用getIntent()。getSerializableExtra(“package.name.example”)来读取它。

否则,请按照这个和这个页面。

你需要创build一个Bundle ,然后在其上使用putSerializable :

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