【问题标题】:How do I pass ArrayList<Object> from one Activity to another Activity如何将 ArrayList<Object> 从一个 Activity 传递到另一个 Activity
【发布时间】:2020-10-19 22:18:16
【问题描述】:

我想将一个对象的 ArrayList 从一个 Activity 传递给 Activity。

这里是示例代码:

{
    ArrayList<object> list=new ArrayList<>();

    Object value[]=new Object[m.size()];
    int n=0;

    value[]=new Object[n];
    value[n]=data.getName("name");
    value[n]=data.getLocation("location");

    list.add(value[n]);
    n++; //Since there are "n" number of object 
    
    }
    
    //here the value a which is ArrayList Object
    // which I want to pass it from here to another activity.

那么现在我将如何将对象从这里传递给另一个活动。 但是,我可以使用 Gson 获得价值。 通过将值转换为 json 并将其作为字符串传递给 SharedPreference 并从另一个活动中检索,然后使用 TypeJson 转换回来以支持其原始形式。

我想知道是否可以使用 Parceable 传递值。因为我在使用时得到了 null 值。

这是我试图使我的 Object 变量 Parceable 的代码:

public class ProductList implements Parcelable {

private String NAME;
private String LOCATION;

public ProductList() {
}

protected ProductList(Parcel in) {
    LOCATION= in.readString();
    NAME= in.readString();
   
}

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

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

public String getNAME() {
    return NAME;
}
public void setNAME(String NAME) {
    this.NAME= NAME;
}
public String getLOCATION() {
    return LOCATION;
}
public void setITEM_IMAGE(String LOCATION) {
    this.LOCATION= LOCATION;
}
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(NAME);
    dest.writeString(LOCATION);
}
}

【问题讨论】:

  • 你可以通过序列化对象来传递。

标签: java android arraylist serialization parcelable


【解决方案1】:

您可以使用活动结果

链接https://developer.android.com/training/basics/intents/result

代码示例

活动主体中的代码

protected void onActivityResult(int requestCode, int resultCode, Intent data)  
       {  
                 super.onActivityResult(requestCode, resultCode, data);  
                  // check if the request code is same as what is passed  here it is 2  
                   if(requestCode==2)  
                         {  
                            String message=data.getStringExtra("MESSAGE");   
                            textView1.setText(message);  
                         }  
     }  

在其他活动中

可以使用json格式传递数据

Gson gson = new Gson(); 字符串 json = gson.toJson(myObj);

 Intent intent=new Intent();  
                    intent.putExtra("MESSAGE",json);  
                    setResult(2,intent);  
                    finish();//finishing activity 

如果不想使用活动结果,可以使用单例类

class MyClass{ 
    companion object {
        val staticField = "This is an example of static field Object Decleration"
        fun getStaticFunction(): String {
            return "This is example of static function for Object Decleration"
        }
    }
}

【讨论】:

  • 以这种方式我想我必须为要传递的变量添加所有“键”。难道不能把它当作 Perceable 传递吗??
  • 也许可以,但我更喜欢传递 json。我更新了代码来传递数据,你也可以在android中使用单例来获取信息
  • 谢谢您,我尝试使用它,但效果相同,但效果更好,您指导的方式。
【解决方案2】:

请参考this link了解。

活动一:

Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
            ArrayList<object> list=new ArrayList<>();
            intent.putExtra("LIST", list);
            startActivity(intent);

活动二:

ArrayList<object> list = (ArrayList<object>)getIntent().getSerializableExtra("LIST");

还在您的自定义类中实现 Serializable。

public class ProductList implements Parcelable, Serializable

【讨论】:

  • 有一件事我不明白,就我而言,我有两个应用程序,一个用于 Receiver,另一个用于 UpdaterReceiver 提取由 updater 更新的数据,当 updater 在服务器中进行一些更改时 Receiver 应用程序它得到崩溃返回异常 * 尝试在 Arraylist 上调用空值引用*,我已将它传递给 RecyclerAdapter。
  • 我已经找到了我评论过的解决方案。谢谢兄弟!!!
  • @AthosTokbi 如果您觉得这对您有帮助,请将答案标记为已接受。
  • 您的解决方案有帮助,但在我尝试获取空值引用时没有解决我的解决方案。但是,它有助于我深入了解它。我用共享偏好尝试了相反的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 2016-01-14
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
相关资源
最近更新 更多