通过intent传递和ArrayList <service>

时间:2016-12-07 10:14:21

标签: android android-intent arraylist

我有一个名为Service的类,它用于使用此构造函数创建Service对象

   Changes to login_shells will take immediate effect.   The  default  for
   login_shells is sh,csh,tcsh,ksh.

   This value is a global configuration parameter only. It cannot be over-
   written by the execution host local configuration.

然后我创建一个列表调用服务列表,如下面的签名

public Service(int id, String service_name, String service_code) {
    this.id = id;
    this.service_name = service_name;
    this.service_code = service_code;
}

我尝试通过List<Service> serviceList = new ArrayList<Service> 对象传递此ArrayList,如此

Intent

但它失败了。我使用ArrayList对象传递intent的方式是什么。

3 个答案:

答案 0 :(得分:1)

您的自定义类必须实现ParcelableSerializable才能在Intent中序列化/反序列化。

您的课程Service必须看起来像这样(使用生成器http://www.parcelabler.com/

public class Service implements Parcelable {
private int id;
private String service_name;
private String service_code;
public Service(int id, String service_name, String service_code) {
this.id = id;
this.service_name = service_name;
this.service_code = service_code;
}


protected Service(Parcel in) {
    id = in.readInt();
    service_name = in.readString();
    service_code = in.readString();
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(id);
    dest.writeString(service_name);
    dest.writeString(service_code);
}

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

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

}

然后你可以使用getIntent().getParcelableArrayListExtra()进行投射

ArrayList<Service> serviceList= intent.<Service>getParcelableArrayList("list"));

发送时请使用它

intent.putParcelableArrayListExtra("list", yourServiceArrayList);

请注意yourServiceArrayList应该是ArrayList

如果是List,则可以通过

intent.putParcelableArrayListExtra("list", (ArrayList<? extends Parcelable>) yourServiceArrayList);

答案 1 :(得分:1)

您可以为'Service'类使用parcelable接口,并通过

发送对象

意图使用'putParcelableArrayListExtra'方法并检索可以使用的数据

'getParcelableArrayListExtra'的。

供您参考 refer this 链接

答案 2 :(得分:1)

使用Serializable实现对象类。 例如

class abc implements Serializable{
//your code
}

然后尝试此代码

ArrayList<abc> fileList = new ArrayList<abc>();
Intent intent = new Intent(MainActivity.this, secondActivity.class);
 intent.putSerializable("arraylisty",filelist);
startActivity(intent);

并在另一方接收意图,如

your arraylist objact=intent.getSerializableExtra(String name)