我已经使用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,所以我改用它。
答案 0 :(得分:140)
尝试使用Bundle.Serializable传递可序列化列表:
Bundle bundle = new Bundle();
bundle.putSerializable("value", all_thumbs);
intent.putExtras(bundle);
在SomeClass Activity中将其命名为:
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
List<Thumbnail> thumbs=
(List<Thumbnail>)bundle.getSerializable("value");
答案 1 :(得分:11)
此代码可以为您提供帮助:
public class EN implements Serializable {
//... you don't need implement any methods when you implements Serializable
}
放置数据。使用额外内容创建新活动:
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
}
//...
答案 2 :(得分:6)
我扩展了ρяσѕρєя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
的优点是简单。但是,我建议您在需要传输大量数据时考虑使用Parcelable
方法,因为Parcelable
是专为Android设计的,并且效率高于Serializable
。您可以使用
Parcelable
课程
答案 3 :(得分:3)
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");
答案 4 :(得分:2)
您需要创建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);
答案 5 :(得分:2)
发送数据:
首先通过对数据类实施Serializable
来制作可序列化的数据
public class YourDataClass implements Serializable {
String someText="Some text";
}
然后将其放入意图
YourDataClass yourDataClass=new YourDataClass();
Intent intent = new Intent(getApplicationContext(),ReceivingActivity.class);
intent.putExtra("value",yourDataClass);
startActivity(intent);
接收数据:
YourDataClass yourDataClass=(YourDataClass)getIntent().getSerializableExtra("value");
答案 6 :(得分:1)
创建自定义对象并实现Serializable。接下来,您可以使用intent.putExtra("package.name.example", <your-serializable-object>)
。
在第二项活动中,您使用getIntent().getSerializableExtra("package.name.example")
答案 7 :(得分:1)
在 kotlin : Object类实现Serializable:
@Transactional(readOnly=false, rollbackFor=Exception.class)
public DboReturns addNewCurrencyPair(ExchangeDbo exchangeDbo, String currencyPairString) {
CurrencyPairDbo currencyPairDbo = exchangeDbo.addCurrencyPair(new CurrencyPair(currencyPairString));
ExchangeDbo newExchangeDbo = exchangeRepository.save(exchangeDbo);
return new DboReturns(newExchangeDbo, currencyPairDbo, null);
}
发送对象时:
class MyClass: Serializable {
//members
}
在片段中,我们想要获取对象:
val fragment = UserDetailFragment()
val bundle = Bundle()
bundle.putSerializable("key", myObject)
fragment.arguments = bundle
答案 8 :(得分: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);
}
答案 9 :(得分:0)
1-您正在使用的android.graphics.Bitmap无法实现Serializable类,因此您必须删除该类,然后它才能工作。
2-简要介绍一下,您可以访问如何pass data between intents。
答案 10 :(得分:-1)
不要忘记在对象将使用的每个类中实现可序列化,就像对象列表一样。否则您的应用将崩溃。
示例:
public class City implements Serializable {
private List<House> house;
public List<House> getHouse() {
return house;
}
public void setHouse(List<House> house) {
this.house = house;
}}
那么House需要这样实现Serializable:
public class House implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}}
然后您可以使用:
Bundle bundle = new Bundle();
bundle.putSerializable("city", city);
intent.putExtras(bundle);
并使用以下命令进行检索:
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
City city = (City)bundle.getSerializable("city");