将parcelables的数组列表传递给不同的活动? [复制]

Posted

技术标签:

【中文标题】将parcelables的数组列表传递给不同的活动? [复制]【英文标题】:Passing an array list of parcelables to a different activity? [duplicate] 【发布时间】:2019-10-04 10:29:18 【问题描述】:

我有一个实现 parcelable 的类胆固醇监视器。在我的活动中,我尝试通过意图将 Parcelables 的数组列表传递给另一个活动。我像这样初始化我的监视器列表:

 private ArrayList<? extends Parcelable> monitor_list;

那我就通过了:

 monitor_list = patientListFragment.getMonitorList();
Intent intent = new Intent(this, CholesterolMonitorActivity.class);
            intent.putParcelableArrayListExtra("monitorList" ,monitor_list);
            startActivity(intent);

我的 get monitor list 方法返回一个胆固醇监测器的数组列表:

 public ArrayList<CholesterolMonitor> getMonitorList()
    return this.monitorList;

在我的接收活动中,我有两个数组列表,

private ArrayList<? extends Parcelable> monitor_list;
private ArrayList<CholesterolMonitor>cholesterol_monitor;

monitor_list= this.getIntent().getParcelableArrayListExtra("monitorList");

 this.cholesterol_monitor = (ArrayList<CholesterolMonitor>) monitor_list;

但是,应用程序在此活动启动时崩溃?这是错误日志。

Process: com.example.safeheart, PID: 22778
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List org.hl7.fhir.dstu3.model.Patient.getName()' on a null object reference
    at com.example.safeheart.patientList.MonitorListRecyclerAdapter.onBindViewHolder(MonitorListRecyclerAdapter.java:41)
    at com.example.safeheart.patientList.MonitorListRecyclerAdapter.onBindViewHolder(MonitorListRecyclerAdapter.java:20)
    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder

【问题讨论】:

发布错误日志 好的,现在我猜它返回了一些东西,但是提交片段后活动崩溃了,因为我们需要将数组列表传递到片段中,所以我无法获得 Intent 并在相同的情况下提交片段创建函数? 【参考方案1】:

你可以像下面那样做

如下创建java对象

public class ClassMyModel implements Serializable 
   private ArrayList<CholesterolMonitor> cholesterolMonitorArrayList;

    public ArrayList<CholesterolMonitor> getCholesterolMonitorArrayList() 
        return cholesterolMonitorArrayList;
    

    public void setCholesterolMonitorArrayList(ArrayList<CholesterolMonitor> cholesterolMonitorArrayList) 
        this.cholesterolMonitorArrayList = cholesterolMonitorArrayList;
    

并在您的 CholesterolMonitor 类中实现 Serializable

public class CholesterolMonitor implements Serializable 
    private String name;

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

在你的活动 A 中

private ArrayList<CholesterolMonitor> cholesterolMonitorArrayList = new ArrayList<>();

            CholesterolMonitor test = new CholesterolMonitor();
            test.setName("test Name");
            cholesterolMonitorArrayList.add(test);

            ClassMyModel data = new ClassMyModel();
            data.setCholesterolMonitorArrayList(cholesterolMonitorArrayList);

            Intent intent = new Intent(SignUpActivity.this, ForgotPwdEmailActivity.class);
            intent.putExtra("TEST", data);
            startActivity(intent);

在你的活动 B 中

       if (getIntent() != null) 
            classMyModel = (ClassMyModel) getIntent().getSerializableExtra("TEST");
            if(classMyModel != null)
                System.out.println("Name :: "+ classMyModel.getCholesterolMonitorArrayList().get(0).getName());
            
        

注意:请确保 ClassMyModel 的每个嵌套类都实现了 Serializable 接口

【讨论】:

以上是关于将parcelables的数组列表传递给不同的活动? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

当意图传递给其他活动时,为啥从 parcelable 中得到错误的值?

Parcelable遇到IOException编写可序列化对象…?

您如何使用Parcelable传递arraylist索引中的元素?

使用自定义视图将字符串数组传递给另一个活动

将对象的嵌套数组列表从适配器传递到活动

如何将 LatLng 的数组列表从一个活动传递到另一个活动