我有一些問題,通過傳遞ArrayList<People>
(其中包含大圖片)通過活動。我失敗了,因爲Bundle
有1MB的限制。 有了一些研究,我發現,這將是更好的序列化對象,並將其保存到一個文件中,所以我做了這個類:NotSerializableException拋出ObjectInputStream.readObject()
public class BundlePeople {
public static long packPeople(Context context, List<People> people) {
long timeToken = System.currentTimeMillis();
String fileName = "temp_" + Long.toString(timeToken);
try {
FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(people);
os.close();
fos.close();
} catch (IOException e) {
Log.e("BundlePeople", e.getMessage());
}
return timeToken;
}
public static List<People> unpackPeople(Context context, long id) {
List<People> list = new ArrayList<>();
String fileName = "temp_" + Long.toString(id);
try {
FileInputStream fis = context.openFileInput(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
list.addAll((List<People>) is.readObject()); //Here I get NotSerializableException on second call
is.close();
fis.close();
} catch (IOException | ClassNotFoundException e) {
Log.e("BundlePeople", e.getMessage());
}
return list;
}
}
它的工作原理一次,但當我嘗試再次使用它,它拋出NotSerializableExcpetion
第一次調用:
傳遞(FirstActivity.java)
Bundle bundle = new Bundle();
bundle.putLong("peopleFileId", BundlePeople.packPeople(FirstActivity.this, listPeople));
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putExtras(bundle);
startActivityForResult(i.setFlags(SecondActivity.FLAG_SELECT), 0);
接收(SecondActivity.java)
long id = getIntent().getExtras().getLong("peopleFileId");
list = new ArrayList<>();
list.addAll(BundlePeople.unpackPeople(getApplicationContext(), id));
它工作正常,現在的問題是,當我使用它的第二次:
第二個電話:
通過(SecondActivity.java)
Intent i = new Intent();
Bundle b = new Bundle();
b.putLong("peopleFileId", BundlePeople.packPeople(SecondActivity.this, list));
i.putExtras(b);
setResult(REQUEST_PEOPLE, i);
finish();
接收(FirstActivity.java [onActivityResult()])
List<People> list = BundlePeople.unpackPeople(
getApplicationContext(), data.getExtras().getLong("peopleFileId"));
這裏我的列表是null
因爲一個例外是在行BundlePeople
扔在第一個代碼表示。
異常消息:Read an exception; java.io.NotSerializableException: br.com.something.activities.SecondActivity$1
我的問題是,爲什麼我會收到這個異常?這是通過活動傳遞大型對象的更好方法嗎?如果是這樣,這裏有什麼問題?
編輯
People.java
public class People implements Serializable {
private static final long serialVersionUID = -9171517741542003990L;
private Integer id;
private String name;
private BitmapSerializable image;
public BitmapSerializable getImage() {
return image;
}
public void setImage(BitmapSerializable image) {
this.image = image;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
你可以發佈你的bean類的人嗎? –
@JayShah檢查編輯的問題! – Rafael
您是否還使BitmapSerializable成爲另一個類?我認爲您的某個類中存在一些不可序列化的問題。 –