为什么我得到这个错误java.util.ArrayList不能被强制转换为android.os.Parcelable

eyh26e7m  于 2024-01-04  发布在  Android
关注(0)|答案(2)|浏览(203)

我在这个代码上得到错误

  1. listObjects = (Listitem) extras.getParcelable(OBJECT_LIST);

字符串
这是我传递意图的方式

  1. Intent intent = new Intent(mcontext,SingleObjectActivity.class);
  2. intent.putParcelableArrayListExtra("Object_list", personArrayList);
  3. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  4. mcontext.startActivity(intent);


这是第二个活动

  1. public class SingleObjectActivity extends Activity
  2. {
  3. public static final String OBJECT_LIST = "Object_list";
  4. private ArrayList<Listitem> Objects;
  5. public ImageView imgview;
  6. private Listitem listObjects;
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.singleobject);
  11. Bundle extras = getIntent().getExtras();
  12. imgview = (ImageView) findViewById(R.id.funnyimage);
  13. if (extras.containsKey(OBJECT_LIST)) {
  14. this.listObjects = (Listitem) extras.getParcelable(OBJECT_LIST);
  15. } else {
  16. this.listObjects = null;
  17. }
  18. if (this.listObjects != null) {
  19. Picasso.
  20. with(getApplicationContext()).
  21. load(this.listObjects.getUrl())
  22. //load()
  23. .placeholder(R.drawable.logo)
  24. .fit()
  25. .noFade()
  26. .into(imgview);
  27. }
  28. }
  29. }


这是listitem

  1. public class Listitem implements Parcelable {
  2. private int order;
  3. private String id;
  4. private String url;
  5. private String userName;
  6. private int likes;
  7. //String name;
  8. public Listitem(Parcel in){
  9. this.id = in.readString();
  10. this.url = in.readString();
  11. // this.name = in.readString();
  12. }
  13. public Listitem(int order, String id, String url, String userName, int likes) {
  14. this.id = id;
  15. this.url = url;
  16. this.userName = userName;
  17. this.order = order;
  18. this.likes = likes;
  19. }
  20. @Override
  21. public int describeContents() {
  22. return 0;
  23. }
  24. public void setUrl(String url) {
  25. this.url = url;
  26. }
  27. public String getUrl() {
  28. return url;
  29. }
  30. public void setId(String id) {
  31. this.id = id;
  32. }
  33. public String getId() {
  34. return id;
  35. }
  36. public int getLikes() {
  37. return likes;
  38. }
  39. public void setLikes(int likes) {
  40. this.likes = likes;
  41. }
  42. @Override
  43. public void writeToParcel(Parcel dest, int flags) {
  44. dest.writeString(this.id);
  45. // dest.writeString(this.name);
  46. dest.writeString(this.url);
  47. }
  48. public static final Parcelable.Creator<Listitem> CREATOR = new Parcelable.Creator<Listitem>() {
  49. public Listitem createFromParcel(Parcel in) {
  50. return new Listitem(in);
  51. }
  52. public Listitem[] newArray(int size) {
  53. return new Listitem[size];
  54. }
  55. };
  56. public String getUserName() {
  57. return userName;
  58. }
  59. public void setUserName(String userName) {
  60. this.userName = userName;
  61. }
  62. public int getOrder() {
  63. return order;
  64. }
  65. public void setOrder(int order) {
  66. this.order = order;
  67. }

ut6juiuv

ut6juiuv1#

你传递了完整的数组列表,但只得到一个对象
比如说,试试这样:
用于发送

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. Intent i = new Intent(this,SecondActivity.class);
  6. ArrayList<MyParcelable> testing = new ArrayList<MyParcelable>();
  7. i.putParcelableArrayListExtra("extraextra", testing);
  8. startActivity(i);
  9. }

字符串
用于接收

  1. public class SecondActivity extends Activity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. ArrayList<MyParcelable> testing = this.getIntent().getParcelableArrayListExtra("extraextra");
  7. }
  8. }


//只有一个成员属性的简单类作为示例

  1. public class MyParcelable implements Parcelable {
  2. private int mData;
  3. /* everything below here is for implementing Parcelable */
  4. // 99.9% of the time you can just ignore this
  5. @Override
  6. public int describeContents() {
  7. return 0;
  8. }
  9. // write your object's data to the passed-in Parcel
  10. @Override
  11. public void writeToParcel(Parcel out, int flags) {
  12. out.writeInt(mData);
  13. }
  14. // this is used to regenerate your object. All Parcelables must have a CREATOR that implements these two methods
  15. public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() {
  16. public MyParcelable createFromParcel(Parcel in) {
  17. return new MyParcelable(in);
  18. }
  19. public MyParcelable[] newArray(int size) {
  20. return new MyParcelable[size];
  21. }
  22. };
  23. // example constructor that takes a Parcel and gives you an object populated with it's values
  24. private MyParcelable(Parcel in) {
  25. mData = in.readInt();
  26. }


}

展开查看全部
qqrboqgw

qqrboqgw2#

你要把一个数组列表

  1. intent.putParcelableArrayListExtra("Object_list", personArrayList);

字符串
但是你只想获取一个Parcelable:

  1. this.listObjects = (Listitem) extras.getParcelable(OBJECT_LIST);


如果你要保存一个数组列表,那么你需要调用getParcelableArrayListExtra

相关问题