2017-07-19 3 views
0

Ich habe die folgende Klasse erstellt und Objekte dieser Klasse verwendet. Ich möchte eine Liste dieser Klasse übergeben und sie an die nächste Aktivität senden.Wie sende ich eine Liste von Objekten von einer Aktivität zu einer anderen in Android?

class contact implements Comparable<contact>, Parcelable { 
    String name; 
    private String phone; 
    private Bitmap image; 

    contact(String n, String p, Bitmap pic) { 
     super(); 
     name = n; 
     phone = p; 
     image = pic; 
    } 

    public contact(Parcel in) { 
     String[] data = new String[3]; 
     in.readStringArray(data); 
     this.name=data[0]; 
     this.phone=data[1]; 
     byte [] encodeByte= Base64.decode(data[2],Base64.DEFAULT); 
     this.image = BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
    } 

    public void setImage(Bitmap image) { 
     this.image = image; 
    } 

    Bitmap getImage() { 
     return image; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    String getName() { 
     return name; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 

    String getPhone() { 
     return phone; 
    } 

    static Comparator<contact> ContactNameComparator 
     = new Comparator<contact>() { 
      public int compare(contact c1, contact c2) { 
       String name1 = c1.getName().toUpperCase(); 
       String name2 = c2.getName().toUpperCase(); 

       return name1.compareTo(name2); 
      } 
    }; 

    @Override 
    public int compareTo(@NonNull contact o) { 
     return 0; 
    } 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeStringArray(new String[]{this.getName(),this.getPhone(),String.valueOf(getImage())}); 
    } 
    public static final Creator<contact> CREATOR = new Creator<contact>(){ 

     @Override 
     public contact createFromParcel(Parcel in) { 
      return new contact(in); 
     } 

     @Override 
     public contact[] newArray(int size) { 
      return new contact[size]; 
     } 
    }; 
} 

In meinem MainActivity, ich schaffe eine Liste

List<contact> c=new ArrayList<>(); 

Und nachdem einige Objekte zu dieser Liste hinzufügen, ich versuche, es auf die nächste Aktivität obwohl putExtra zu senden(), aber bin immer ein Error. Ich versuche, die Liste wie diese zu passieren,

Intent intent=new Intent(getApplicationContext(),NextActivity.class); 
     intent.putExtra("VAR1", (Parcelable) c); 
     startActivity(intent); 

Und in meinem NextActivity.class bin es so empfängt,

Bundle bundle = getIntent().getExtras(); 
    c = bundle.getParcelableArrayList("VAR1"); 

Auf die App läuft, bin ich die folgende Fehlermeldung erhalten:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to android.os.Parcelable 

Wie soll ich dieses Problem lösen?

Antwort

1

Versuchen Sie, diesen

-Code von Aktivität aufrufen

Intent intent=new Intent(getApplicationContext(),NextActivity.class); 
Bundle bundle = new Bundle(); 
bundle.putParcelableArrayList("VAR1", arraylist); 
intent.putExtras(bundle);  
this.startActivity(intent); 

-Code auf genannte Aktivität

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 

    Bundle bundle = getIntent().getExtras(); 
    ArrayList<contact> arraylist = bundle.getParcelableArrayList("VAR1"); 
} 
+0

Wenn putParcelableArrayList tun ("VAR1", Arraylist), tritt dieser Fehler auf: Fehler :(291, 51) Fehler: Inkompatible Typen: Liste kann nicht in ArrayList

+0

sein funktioniert perfekt Ich versuchte Ihren Code mit putParcelableArrayList ("VAR1", Arraylist) – akhilesh0707

+0

Ja sorry, ich habe einen Tippfehler in meinem Projekt. Vielen Dank. –

Verwandte Themen