使用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
类:
- 一个在线工具 – parcelabler
- 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);