gpt4 book ai didi

java - 如何将 arraylist 数据从一个 Activity 传输到另一个 Activity ?

转载 作者:行者123 更新时间:2023-11-30 01:03:14 25 4
gpt4 key购买 nike

我正在尝试传输 ArrayList 的数据到另一个Activity在新的 ArrayList 中显示它的一些内容.我将过滤要在下一个中显示的数据 Activity . ArrayList的内容来自使用json的mysql数据库。

行 - productList = new ArrayList<myProduct>(); - 导致我的 arraylist 变空,因为它创建了一个新对象。我不知道我的编码方式是否正确,但我希望你能给我一些你的想法。

这是我的代码:

菜单.java

public class Menu extends AppCompatActivity implements AdapterView.OnItemClickListener {

public ArrayList<myProduct> productList;
Button viewOrder;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);

String product = "http://10.0.2.2/myDB/product.php";

StringRequest stringRequestProduct = new StringRequest(Request.Method.GET, product, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);

productList = new JsonConverter<myProduct>().toArrayList(response, myProduct.class);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error retrieving data", Toast.LENGTH_SHORT).show();
}
});

MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequestProduct);

viewOrder = (Button)findViewById(R.id.viewOrder);
viewOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(Menu.this, Order.class);
startActivity(i);

}
});
}
}

我的产品类

import com.google.gson.annotations.SerializedName;

public class myProduct {

@SerializedName("productID")
public int productID;
@SerializedName("categoryID")
public int categoryID;
@SerializedName("productName")
public String productName;
@SerializedName("productPrice")
public int productPrice;

public int productQuantity = 0;

public myProduct(int productID, int categoryID, String productName, int productPrice){
this.productID = productID;
this.categoryID = categoryID;
this.productName = productName;
this.productPrice = productPrice;
}

public int getProductID(){
return productID;
}

public int getCategoryID(){
return categoryID;
}

public String getProductName(){
return productName;
}

public int getProductPrice(){
return productPrice;
}

}

Order.Java

public class Order extends AppCompatActivity {

public ListView orderListView;
public myOrderAdapter orderAdapter;
public ArrayList<myProduct> productList, filter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order);

orderListView = (ListView)findViewById(R.id.orderList);
productList = new ArrayList<myProduct>();
filter = new ArrayList<myProduct>();

for(myProduct item : productList){
//Condition before adding
if(item.productQuantity > 0) {
Log.d(TAG,item.getProductName());
filter.add(item);
}
}
orderAdapter = new myOrderAdapter(getApplicationContext(),filter);
orderListView.setAdapter(orderAdapter);
}
}

最佳答案

要实现这个,你需要实现Parcelable(注意,你也可以通过Serializable来实现,但是Parcelable比Serializable快很多,强烈推荐对于安卓)

你必须让你的 myProductParcelable ,你可以手动实现或者有一个 android studio 插件可以让你的模型类 parcelable 。你可以看看this post ,实现 parcelable 。

在实现 Parcelable 之后,在你的 Menu 类中做这样的事情

 viewOrder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(Menu.this, Order.class);
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("productList",productList);
intent.putExtras(bundle);
startActivity(i);
}
});

在您的 Order 类中,按以下方式接收它。

ArrayList<myProduct> productList=
(ArayList<myProduct>)bundle.getParcelableArrayList("productList");

编辑在实现 parcelable 之后,您的 myProduct 类应该是这样的

public class myProduct implements Parcelable {

public int productID;

public int categoryID;

public String productName;

public int productPrice;

public int productQuantity = 0;

public myProduct(int productID, int categoryID, String productName, int productPrice){
this.productID = productID;
this.categoryID = categoryID;
this.productName = productName;
this.productPrice = productPrice;
}

public int getProductID(){
return productID;
}

public int getCategoryID(){
return categoryID;
}

public String getProductName(){
return productName;
}

public int getProductPrice(){
return productPrice;
}


protected myProduct(Parcel in) {
productID = in.readInt();
categoryID = in.readInt();
productName = in.readString();
productPrice = in.readInt();
productQuantity = in.readInt();
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(productID);
dest.writeInt(categoryID);
dest.writeString(productName);
dest.writeInt(productPrice);
dest.writeInt(productQuantity);
}

@SuppressWarnings("unused")
public static final Parcelable.Creator<myProduct> CREATOR = new Parcelable.Creator<myProduct>() {
@Override
public myProduct createFromParcel(Parcel in) {
return new myProduct(in);
}

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

希望这对您有所帮助。让我知道它是否有效。

关于java - 如何将 arraylist 数据从一个 Activity 传输到另一个 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39190595/

25 4 0