java.util.ArrayList不能强制转换为android.os.Parcelable.键期望Parcelabl



下列错误的原因是什么

Key Object_list expected Parcelable but value was a java.util.ArrayList.  The default value <null> was returned.

这是完整代码

public class SingleObjectActivity extends Activity
{
    public static final String OBJECT_LIST = "Object_list";
    private ArrayList<Listitem> Objects;
    public ImageView imgview;
    private Listitem listObjects;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.singleobject);
        Bundle extras = getIntent().getExtras();
        imgview = (ImageView) findViewById(R.id.funnyimage);
        if (extras.containsKey(OBJECT_LIST)) {
            this.listObjects = extras.getParcelable(OBJECT_LIST);
        } else {
            this.listObjects = null;
        }
        if (listObjects != null) {
            Picasso.
                    with(getApplicationContext()).
                    load(listObjects.getUrl())
                            //load()
                    .placeholder(R.drawable.logo)
                    .fit()
                    .noFade()
                    .into(imgview);
        }
    }
}

发送意图

        ArrayList<Listitem> personArrayList = new ArrayList<>();
        personArrayList.add(new Listitem(item.getOrder(), item.getId(), item.getUrl(), item.getUserName(), item.getLikes()));
        Intent intent = new Intent(mcontext,SingleObjectActivity.class);
        intent.putExtra("Object_list", personArrayList);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mcontext.startActivity(intent);

编辑4

        ArrayList<Listitem> items = getIntent().getParcelableArrayListExtra("Object_list");
        Bundle extras = getIntent().getExtras();
        imgview = (ImageView) findViewById(R.id.funnyimage);
     /*   if (extras != null) {
            Objects = extras.getParcelableArrayList(OBJECT_LIST);
        } else {
            Objects = new ArrayList<Listitem>();
        }*/
        if (extras.containsKey(OBJECT_LIST)) {
//            this.listObjects = extras.getParcelable(OBJECT_LIST);
         //   this.listObjects = (Listitem) extras.getParcelable(OBJECT_LIST);
            this.Objects=  extras.getParcelableArrayList("Object_list");

        } else {
            this.Objects = null;
        }
        if (this.listObjects != null) {
            Picasso.
                    with(getApplicationContext()).
                    load(this.listObjects.getUrt())
                            //load()
                    .placeholder(R.drawable.logo)
                    .fit()
                    .noFade()
                    .into(imgview);
        }
    }

发送ArrayList时:

Intent intent = new Intent(context ,TargetActivity.class);
        intent.putParcelableArrayListExtra("Object_list", personArrayList);
        context.startActivity(intent);

当收到你的ArrayList时:

ArrayList<ListItem> items = getIntent().getParcelableArrayListExtra("Object_list");

注意,这与getIntent().getExtras().getParcelableArrayList()不同。目前,我认为你写错了

Bundle extras = geIntent().getExtras();
extras.getParcelableArrayList("Object_list");

同样,ListItem,尽管实现了Parcelable,并没有复制它的所有值。这可能不是导致问题的原因,但值得记住。

我认为你应该这样做:

 intent.putParcelableArrayListExtra("Object_list", (ArrayList<? extends Parcelable>) personArrayList);

并进入预期的活动,如:

 this.Objects= extras.getParcelableArrayList("Object_list");

确保Listitem类实现Parcelable

你可以试试:

extras得到ArrayList

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

1。创建模型类,如listtitem Parcelable

2。第二步,

Bundle bundle = new Bundle(); bundle.putParcelableArrayList("list",list); intent.putExtras(bundle);

3。ArrayList = bundle.getParcelableArrayList("list");

发送意图码intent.putExtra("Object_list", personArrayList);替换为此intent.putParcelableArrayListExtra("Object_list", personArrayList);将解决问题

最新更新