簡體   English   中英

如何使用putExtra()將自定義對象從一個活動傳遞到另一個活動

[英]How can I pass a custom object from one activity to another using putExtra()

我一直在嘗試將array對象從一個活動傳遞到另一個活動。 我一直在搜索,看來您的對象必須實現ParcelableSerializable (這對我來說沒有多大意義。我不知道為什么您可以將對象數組傳遞給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從其他類調用

我如何通過 ArrayList<object> 從一個活動到另一個活動<div id="text_translate"><p>我想將 Object 的 ArrayList 從一個活動傳遞到另一個活動。</p><p> 這是示例代碼:</p><pre> { ArrayList&lt;object&gt; list=new ArrayList&lt;&gt;(); Object value[]=new Object[m.size()]; int n=0; value[]=new Object[n]; value[n]=data.getName("name"); value[n]=data.getLocation("location"); list.add(value[n]); n++; //Since there are "n" number of object } //here the value a which is ArrayList Object // which I want to pass it from here to another activity.</pre><p> 那么現在我將如何將 object 從這里傳遞給另一個活動。 <strong>但是</strong>,我可以使用<strong>Gson</strong>獲得值。 通過將值轉換為<strong>json</strong>並將其作為字符串傳遞給<strong>SharedPreference</strong>並從另一個活動中檢索,然后使用<strong>類型</strong>從<strong>Json</strong>轉換回來以支持其原始形式。</p><p> 我想知道是否可以使用<strong>Parceable</strong>傳遞值。 因為我在使用它時得到了 null 值。</p><p> 這是我試圖使我的 Object 變量 Parceable 的代碼:</p><pre> public class ProductList implements Parcelable { private String NAME; private String LOCATION; public ProductList() { } protected ProductList(Parcel in) { LOCATION= in.readString(); NAME= in.readString(); } public static final Creator&lt;ProductList&gt; CREATOR = new Creator&lt;ProductList&gt;() { @Override public ProductList createFromParcel(Parcel in) { return new ProductList(in); } @Override public ProductList[] newArray(int size) { return new ProductList[size]; } }; public String getNAME() { return NAME; } public void setNAME(String NAME) { this.NAME= NAME; } public String getLOCATION() { return LOCATION; } public void setITEM_IMAGE(String LOCATION) { this.LOCATION= LOCATION; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(NAME); dest.writeString(LOCATION); } }</pre></div></object>

[英]How do I pass ArrayList<Object> from one Activity to another Activity

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何通過使用putExtra從一個活動向另一個發送arraList? 如何將 Bitmap 對象從一個活動傳遞到另一個活動 使用.putExtra()或其他方法將DatabaseReference傳遞給另一活動? 無法將作為putExtra的Parcelable對象從IntentService傳遞到另一個Activity 如何使用Intent.putExtra和Parcel將對象從一個Activity發送到另一個Activity? 如何將 RadioGroup 從一項活動傳遞到另一項活動? 如何將數據正確地從一項活動傳遞到另一項活動? 如何在android Kotlin中將對象從一個活動傳遞到另一個活動? 我如何通過 ArrayList<object> 從一個活動到另一個活動<div id="text_translate"><p>我想將 Object 的 ArrayList 從一個活動傳遞到另一個活動。</p><p> 這是示例代碼:</p><pre> { ArrayList&lt;object&gt; list=new ArrayList&lt;&gt;(); Object value[]=new Object[m.size()]; int n=0; value[]=new Object[n]; value[n]=data.getName("name"); value[n]=data.getLocation("location"); list.add(value[n]); n++; //Since there are "n" number of object } //here the value a which is ArrayList Object // which I want to pass it from here to another activity.</pre><p> 那么現在我將如何將 object 從這里傳遞給另一個活動。 <strong>但是</strong>,我可以使用<strong>Gson</strong>獲得值。 通過將值轉換為<strong>json</strong>並將其作為字符串傳遞給<strong>SharedPreference</strong>並從另一個活動中檢索,然后使用<strong>類型</strong>從<strong>Json</strong>轉換回來以支持其原始形式。</p><p> 我想知道是否可以使用<strong>Parceable</strong>傳遞值。 因為我在使用它時得到了 null 值。</p><p> 這是我試圖使我的 Object 變量 Parceable 的代碼:</p><pre> public class ProductList implements Parcelable { private String NAME; private String LOCATION; public ProductList() { } protected ProductList(Parcel in) { LOCATION= in.readString(); NAME= in.readString(); } public static final Creator&lt;ProductList&gt; CREATOR = new Creator&lt;ProductList&gt;() { @Override public ProductList createFromParcel(Parcel in) { return new ProductList(in); } @Override public ProductList[] newArray(int size) { return new ProductList[size]; } }; public String getNAME() { return NAME; } public void setNAME(String NAME) { this.NAME= NAME; } public String getLOCATION() { return LOCATION; } public void setITEM_IMAGE(String LOCATION) { this.LOCATION= LOCATION; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(NAME); dest.writeString(LOCATION); } }</pre></div></object> 如何傳遞ArrayList <File> 對象從一個活動到另一個活動使用意圖?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM