![](/img/trans.png)
[英]how to send an arraList from one activity to another by using putExtra?
[英]How can I pass a custom object from one activity to another using putExtra()
我一直在嘗試將array
對象從一個活動傳遞到另一個活動。 我一直在搜索,看來您的對象必須實現Parcelable
或Serializable
。 (這對我來說沒有多大意義。我不知道為什么您可以將對象數組傳遞給putExtra()
)。 我不是在嘗試傳遞特定的int或String,而是讓人們說一個人對象數組。 但是我一直有麻煩。 我要傳遞的對象數組是包含bitmap
和一些字符串的對象數組。 我試圖讓我的對象同時實現Parcelable和Serializable,但我不斷出錯。 這是我實現Serializable時遇到的錯誤。 有人有提示嗎?
03-26 20:35:53.886: E/AndroidRuntime(30066): FATAL EXCEPTION: main
03-26 20:35:53.886: E/AndroidRuntime(30066): Process: com.example.test, PID: 30066
03-26 20:35:53.886: E/AndroidRuntime(30066): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.test.Person)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.os.Parcel.writeSerializable(Parcel.java:1316)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.os.Parcel.writeValue(Parcel.java:1264)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.os.Bundle.writeToParcel(Bundle.java:1692)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.os.Parcel.writeBundle(Parcel.java:636)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.content.Intent.writeToParcel(Intent.java:7414)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2289)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1437)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.app.Activity.startActivityForResult(Activity.java:3511)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.app.Activity.startActivityForResult(Activity.java:3472)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.app.Activity.startActivity(Activity.java:3714)
03-26 20:35:53.886: E/AndroidRuntime(30066): at android.app.Activity.startActivity(Activity.java:3682)
03-26 20:35:53.886: E/AndroidRuntime(30066): at com.example.test.MainActivity$1.onItemClick(MainActivity.java:54)
Intent intent=new Intent(MainActivity.this,secondAcitity.class); Bundle extras=new Bundle();
YourObject mObject = new YourObject();
extras.putSerializable("tag",mObject)
intent.putExtras(extras);
startActivity(intent);
YourObject
public class YourObject implements Serializable
{
private String name;//generate your getters n setter
}
在secondActivity中
YourObject receivedmObject = (YourObject ) getIntent().getExtras().getSerializable(
"tag");
您不想傳遞位圖或包含位圖的對象,更不用說包含位圖的對象數組。
從崩潰日志中,您的Person對象似乎還實現了Parcelable(同時實現了Serializable)。 刪除implements Parcelable
,錯誤應該消失。
我的建議是讓您的Person對象僅包含位圖的URI(Weblink或本地存儲uri),並僅根據需要構建位圖。
就我而言,我總是使用單例在兩個活動之間共享自定義對象。 您還可以使用Parcelable/Serializable
。
單例示例: http : //pastebin.com/pBeB7FBv
在您的第一個活動中,
SharedData sd = SharedData.getInstance();
sd.setObjectList(your_object_list);
在第二個活動中
SharedData sd = SharedData.getInstance();
ArrayList<Object> myObjList = new ArrayList<Object>;
myObjList = sd.getObjectList();
用裸手將其寫入,因此可能需要進行一些調整。
了解更多: http : //developer.android.com/guide/faq/framework.html#3
您只能在可拆分或可序列化的Intent之間傳遞對象。 這是一個很好的例子
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
根據您的需要進行更改。 記住 CREATOR
應該定義為public static final Parcelable.Creator
。
我也是對象傳輸的受害者,並經歷了可序列化,可打包和使用Gson的過程。 最后,我通過使用Eventbus成功了。 要在兩個活動之間傳輸自定義對象,“ EventBus”可能會很有用。 要設置EventBus,只需從此處下載.jar並在您的Android項目中引用它即可。
在您的SourceActivity中
Intent intent = new Intent(this,Destination.class); de.greenrobot.event.EventBus.getDefault().postSticky(your_Object_to_send); startActivity(Intent);
在您的DestinationActivity中
Object myObject = (Object)EventBus.getDefault().removeStickyEvent(Object.class)
注意,不需要復雜的東西。 效率比較完成這里由史蒂芬
使用static關鍵字訪問數組。 在實現的地方定義數組靜態,並使用ClassName.array從其他類調用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.