Java 如何使用parcelable将对象列表从一个活动传递到另一个活动
我想将itemselected或ItemsInCart的列表传递给另一个活动。我的物品模型实现了可包裹。问题是在我的第二节活动课中,我在下面遇到了错误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
原因: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")
}