Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将哈希集与自定义对象打包_Android_Hashmap_Hashset_Parcelable - Fatal编程技术网

Android 如何将哈希集与自定义对象打包

Android 如何将哈希集与自定义对象打包,android,hashmap,hashset,parcelable,Android,Hashmap,Hashset,Parcelable,我正在用android实现一个应用程序,我需要让我的Objects包在活动之间移动。我在服务器中使用hibernate,因此我的类将哈希集作为atribute,我不知道如何打包 这是我的代码和我的尝试。。。但我不知道它是否可以,我也不知道如何给包裹写信。 此外,我想知道我是否做好了日期包裹和我作为房东的其他目标 public class Incidencia implements Parcelable { // Atributos private String id_incidencia; p

我正在用android实现一个应用程序,我需要让我的Objects包在活动之间移动。我在服务器中使用hibernate,因此我的类将哈希集作为atribute,我不知道如何打包

这是我的代码和我的尝试。。。但我不知道它是否可以,我也不知道如何给包裹写信。 此外,我想知道我是否做好了日期包裹和我作为房东的其他目标

public class Incidencia implements Parcelable {

// Atributos
private String id_incidencia;
private String estado;
private double latitud;
private double longitud;
private Date fecha_creacion;
private Date fecha_cierre;

private Puesto puesto;
private SubTipo subtipo;

private Set<iTarea> iTareas = new HashSet<iTarea>();

// Constructores
public Incidencia() {}

public Incidencia(String id, String est, double lat, double lon, Date f_cre, Date f_cie, Puesto pue, SubTipo sub, Set<iTarea> iTa) {
    this.id_incidencia = id;
    this.estado = est;
    this.latitud = lat;
    this.longitud = lon;
    this.fecha_creacion = f_cre;
    this.fecha_cierre = f_cie;
    this.puesto = pue;
    this.subtipo = sub;
    this.iTareas = iTa;
}

// Necesarios para que sea Parcelable
public Incidencia(Parcel in) {
    this.id_incidencia = in.readString();
    this.estado = in.readString();
    this.latitud = in.readDouble();
    this.longitud = in.readDouble();
    this.fecha_creacion = new Date(in.readLong());
    this.fecha_cierre = new Date(in.readLong());
    this.puesto = (Puesto)in.readParcelable(Puesto.class.getClassLoader());
    this.subtipo = (SubTipo)in.readParcelable(SubTipo.class.getClassLoader());
    this.iTareas = (Set<iTarea>) in.readHashMap(iTarea.class.getClassLoader());

}

public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(this.getId_incidencia());
    dest.writeString(this.getEstado());
    dest.writeDouble(this.getLatitud());
    dest.writeDouble(this.getLongitud());
    dest.writeLong(this.getFecha_creacion().getTime());
    dest.writeLong(this.getFecha_cierre().getTime());
    dest.writeParcelable((Parcelable) this.puesto, flags);
    dest.writeParcelable((Parcelable) this.subtipo, flags);
}

public int describeContents() {
    return 0;
}

public static final Parcelable.Creator<Incidencia> CREATOR = new Parcelable.Creator<Incidencia>() {
    public Incidencia createFromParcel(Parcel in) {
        return new Incidencia(in);
    }

    public Incidencia[] newArray(int size) {
        return new Incidencia[size];
    }
};
public类Incidencia实现可包裹{
//心房肌
私有字符串id_incidencia;
私人字符串estado;
私人双纬度;
私人双纵;
非公开日期:fecha_creacion;
私人约会费夏奥·齐尔;
私人普埃斯托普埃斯托;
私人子IPO子IPO;
私有集iTareas=newhashset();
//建设者
公共事件(){}
公共事件(字符串id、字符串est、双lat、双lon、f_cre日期、f_cie日期、Puesto pue、子IPO子集合、iTa){
this.id_incidencia=id;
this.estado=est;
this.latitud=lat;
this.longitud=lon;
this.fecha_creacion=f_cre;
this.fecha_cierre=f_cie;
this.puesto=pue;
this.subtipo=sub;
this.iTareas=iTa;
}
//海上包裹的必要性
公共事件(包裹内){
this.id_incidencia=in.readString();
this.estado=in.readString();
this.latitud=in.readDouble();
this.longitud=in.readDouble();
this.fecha_creacion=新日期(in.readLong());
this.fecha_cierre=新日期(in.readLong());
this.puesto=(puesto)in.readParcelable(puesto.class.getClassLoader());
this.subtipo=(subtipo)在.readParcelable(subtipo.class.getClassLoader())中;
.readHashMap(iTarea.class.getClassLoader())中的this.iTareas=(Set);
}
公共无效写入包裹(包裹目的地,内部标志){
dest.writeString(this.getId_incidencia());
dest.writeString(this.getEstado());
dest.writeDouble(this.getLatitud());
dest.writeDouble(this.getLongitud());
dest.writeLong(this.getFecha_creacion().getTime());
dest.writeLong(this.getFecha_cierre().getTime());
dest.writeparceable((可包裹)this.puesto,flags);
dest.writeparceable((可包裹)this.subtipo,标志);
}
公共int描述内容(){
返回0;
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
公共事件创建自地块(地块位于){
返回新事件(in);
}
公共事件[]新数组(整数大小){
返回新发生率[大小];
}
};

我相当肯定它不会起作用,主要是因为
集合
不是
地图
。更好的方法是使用
集合。toArray
方法从集合中获取对象数组,并使用将其写入地块。然后,您可以在重新创建obj时自己读取数组并填充集合这将要求您的
iTarea
类也实现
Parcelable
,但这是一个比尝试将
HashSet
作为
HashMap
传递要好得多的解决方案


顺便说一句,您的其他对象和日期应该可以。

“但我不知道它是否正常”:它可以工作吗?如果不行,您遇到的具体问题是什么?我不知道如何将hashset/map放入writetoparcel函数中。在this.iTareas=(Set)in.readHashMap(iTarea.class.getClassLoader());我收到的消息类型为safety:Unchecked cast from HashMap to Set