2017-07-19 54 views
0

我已经创建了以下类并使用了此类的对象。我想传递这个类的列表并将它发送给下一个活动。如何在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]; 
     } 
    }; 
} 

在我的MainActivity,我创建一个列表

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

并加入一些对象到这个列表后,我想将它发送到虽然putExtra()的下一个活动,但我得到的错误。 我试图通过列表这样,

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

而且在我NextActivity.class,我接受它这个样子,

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

在运行的应用程序,我收到以下错误:

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

我应该如何解决这个问题?

回答

1

从所谓的活动调用活动

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

代码试试这个

代码

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

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

在做putParcelableArrayList( “VAR1”,ArrayList中),出现此错误: 错误:(291,51)错误:不兼容的类型:列表无法转换为ArrayList <?扩展Parcelable> –

+0

其工作完美我试着用putParcelableArrayList(“VAR1”,arraylist)代码 – akhilesh0707

+0

对不起,我在我的项目中犯了一个错字。谢谢。 –

相关问题