Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用parcelable将对象列表从一个活动传递到另一个活动_Java_Android Intent_Android Recyclerview_Parcelable - Fatal编程技术网

Java 如何使用parcelable将对象列表从一个活动传递到另一个活动

Java 如何使用parcelable将对象列表从一个活动传递到另一个活动,java,android-intent,android-recyclerview,parcelable,Java,Android Intent,Android Recyclerview,Parcelable,我想将itemselected或ItemsInCart的列表传递给另一个活动。我的物品模型实现了可包裹。问题是在我的第二节活动课中,我在下面遇到了错误 原因:java.lang.NullPointerException:试图调用com.example.Project1.SecondActivity.onCreate(SecondActivity.java:59)上空对象引用的虚拟方法'void androidx.recyclerview.widget.recyclerview.setLayout

我想将itemselected或ItemsInCart的列表传递给另一个活动。我的物品模型实现了可包裹。问题是在我的第二节活动课中,我在下面遇到了错误

原因:java.lang.NullPointerException:试图调用com.example.Project1.SecondActivity.onCreate(SecondActivity.java:59)上空对象引用的虚拟方法'void androidx.recyclerview.widget.recyclerview.setLayoutManager(androidx.recyclerview.widget.recyclerview$LayoutManager)'

下面是代码

示范项目

public class Item implements Parcelable {
private int iid;
private String itenname;
private String itemprice;
private String itemstock;
private int totalInCart;
private List<Item> items;

public Item(int iid, String itenname, String itemprice, String itemstock, int totalInCart,List<Item> items) {
    this.iid = iid;
    this.itenname = itenname;
    this.itemprice = itemprice;
    this.itemstock = itemstock;
    this.totalInCart = totalInCart;
    this.items = items;
}

protected Item(Parcel in) {
    iid = in.readInt();
    itenname = in.readString();
    itemprice = in.readString();
    itemstock = in.readString();
    totalInCart = in.readInt();
    items = in.createTypedArrayList(Item.CREATOR);
}

public static final Creator<Item> CREATOR = new Creator<Item>() {
    @Override
    public Item createFromParcel(Parcel in) {
        return new Item(in);
    }

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

public List<Item> getItems() {
    return items;
}

public void setItems(List<Item> items) {
    this.items = items;
}

public int getIid() {
    return iid;
}

public void setIid(int iid) {
    this.iid = iid;
}

public String getItenname() {
    return itenname;
}

public void setItenname(String itenname) {
    this.itenname = itenname;
}

public String getItemprice() {
    return itemprice;
}

public void setItemprice(String itemprice) {
    this.itemprice = itemprice;
}

public String getItemstock() {
    return itemstock;
}

public void setItemstock(String itemstock) {
    this.itemstock = itemstock;
}

public int getTotalInCart() {
    return totalInCart;
}

public void setTotalInCart(int totalInCart) {
    this.totalInCart = totalInCart;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(iid);
    dest.writeString(itenname);
    dest.writeString(itemprice);
    dest.writeString(itemstock);
    dest.writeInt(totalInCart);
    dest.writeTypedList(items);
}
公共类项实现可包裹{
私人国际ID;
私有字符串名称;
私有字符串项目价格;
私人股票;
私人int TotalInt;
私人清单项目;
公共项(int iid、String itenname、String itemprice、String itemstock、int TotalInNot、列表项){
这个。iid=iid;
this.itenname=itenname;
this.itemprice=itemprice;
this.itemstock=itemstock;
this.totalIncontaint=totalIncontaint;
这个项目=项目;
}
受保护物品(包裹中){
iid=in.readInt();
itenname=in.readString();
itemprice=in.readString();
itemstock=in.readString();
totalInvot=in.readInt();
items=in.createTypedArrayList(Item.CREATOR);
}
公共静态最终创建者=新创建者(){
@凌驾
公共项目createFromParcel(地块中){
返回新项目(在中);
}
@凌驾
公共项[]新数组(整数大小){
返回新项目[大小];
}
};
公共列表getItems(){
退货项目;
}
公共无效集合项(列表项){
这个项目=项目;
}
public int getIid(){
返回iid;
}
公共无效设置iid(内部iid){
这个。iid=iid;
}
公共字符串getItenname(){
返回itenname;
}
public void setItenname(字符串itenname){
this.itenname=itenname;
}
公共字符串getItemprice(){
退货价格;
}
公共无效setItemprice(字符串itemprice){
this.itemprice=itemprice;
}
公共字符串getItemstock(){
退货库存;
}
公共void setItemstock(字符串itemstock){
this.itemstock=itemstock;
}
public int getTotalInCart(){
返回TotalIntranet;
}
公共void setTotalIncontain(int TotalIncontain){
this.totalIncontaint=totalIncontaint;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的地记录(iid);
目的地记录(itenname);
目的书面资本(项目价格);
目的地书面资本(项目存量);
目的写入(TotalIncontent);
目的地书面清单(项目);
}
}

第一项活动; 我想传递给第二个活动的列表是“itemsInCart”

buttonCheckout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (itemsInCart==null||itemsInCart.size()<=0){
                Toast.makeText(List_Items.this, "Please add some items to the cart.", Toast.LENGTH_SHORT).show();
                return;
            }

           ArrayList<Item> additems = new ArrayList<Item>();
            for (int i = 0; i < itemsInCart.size(); i++){
                additems.add(itemsInCart.get(i));
            }

            Intent intent = new Intent(MainActivity.this,DisplaySelectedItems.class);
            intent.putParcelableArrayListExtra ("Itemselected", additems);
            startActivity(intent);

        }
    });
buttonCheckout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){

如果(itemsInCart==null | | itemsInCart.size()检查是否在xml中添加了RecyclerView,即activity|u second.xml

如果在xml中添加了Recyclerview,请检查是否在SecondActivity中使用findViewById引用了它

RecyclerView CartItemsRecyclerView=findViewById(R.id.RecyclerView\u id)

布局管理器出现错误,即使用空对象引用引用它,这意味着CartItemsInRecyclerView为空

编辑:

在第一项活动中:-

 for (int i = 0; i < itemsInCart.size(); i++){

            additems.add(itemsInCart.get(i));

        }

//log statement 

 for (int i = 0; i < additems.size(); i++){

  Log.d("firstActivity",i.getItenname())

 }
        
 
for(int i=0;i
在第二项活动中:-

而不是bundle.getgetParcelableArrayList尝试getIntent().getGetGetParcelableArrayList

  ArrayList<Item> selecteditems = 
  getIntent().getParcelableArrayList("Itemselected");

//log statement

 if(selecteditems.size()!=0){

   for (int i = 0; i < selecteditems.size(); i++){

       Log.d("secondActivity",i.getItenname())
  }

 }else{

    Log.d("secondActivity","empty data")
 }
ArrayList selecteditems=
getIntent().getParcelableArrayList(“Itemselected”);
//日志语句
如果(selecteditems.size()!=0){
对于(int i=0;i

然后在Logcat中检查结果

谢谢@Shobhith。你是对的,我没有引用RecyclerView CartItemsRecyclerView。我已经引用了它,现在可以启动第二个活动。但是RecyclerView是空的,这意味着第一个活动没有发送数据,或者第二个活动没有从意图中提取数据。请再次提供帮助。我如何在第二个活动的回收器中显示第一个活动中选择的项目列表?使用日志语句检查您的第一个活动是否正在发送数据,第二个活动是否正在接收数据请提供一个示例。我已记录了第一个活动发送的数据。下面是发送的内容[com.example.Project1.Models]。Item@6ddbfc4,com.example.Project1.Models。Item@2708ead,com.example.Project1.Models。Item@c33a5e2]我在第一个活动中选择了3项。请帮助我如何正确地将列表从第一个活动发送到第二个活动,以及如何在第二个活动中检索列表。现在检查编辑的答案
 for (int i = 0; i < itemsInCart.size(); i++){

            additems.add(itemsInCart.get(i));

        }

//log statement 

 for (int i = 0; i < additems.size(); i++){

  Log.d("firstActivity",i.getItenname())

 }
        
 
  ArrayList<Item> selecteditems = 
  getIntent().getParcelableArrayList("Itemselected");

//log statement

 if(selecteditems.size()!=0){

   for (int i = 0; i < selecteditems.size(); i++){

       Log.d("secondActivity",i.getItenname())
  }

 }else{

    Log.d("secondActivity","empty data")
 }