2013-02-27 46 views
1

我在android中实现了一个应用程序,并且我需要使我的objets可以在活动之间移动。我在服务器中使用hibernate,所以我的类有散列集作为属性,我不知道如何打包。如何使用自定义对象来打包哈希集

这是我的代码和我的尝试...但我不知道如果它确定,我不知道做el写包裹。 此外,我想知道,如果我做得很好包裹的日期和我的其他OBJETS作为atributes

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]; 
    } 
}; 
+1

“但我不知道它是否可以”:它工作吗?如果不是,你遇到的具体问题是什么? – Geobits 2013-02-27 01:31:15

+0

我不知道hoy将hashset/map放在writetoparcel函数中。在this.iTareas =(Set )in.readHashMap(iTarea.class.getClassLoader());我得到这个消息类型安全性:未选中从HashMap投射到设置 r1k4r2 2013-02-27 01:35:38

回答

9

我相当肯定它不会工作,主要是因为Set不是Map。更好的方法是使用Set.toArray方法从您的设备中获取一组对象,并使用Parcel.writeTypedArray将其写入宗地。然后,您可以只读数组并在重新创建对象时自行填充Set。这将需要你的iTarea类实现Parcelable以及,但它是一个更好的解决方案,然后试图通过HashSet关闭作为HashMap

顺便说一句,您的其他对象和日期应该没问题。

+0

非常感谢你 – r1k4r2 2013-02-27 02:23:04

+0

你能重新看吗? – r1k4r2 2013-03-04 00:24:45