android - 如何将哈希集与自定义对象打包在一起

标签 android hashmap hashset parcelable

我正在 android 中实现一个应用程序,我需要让我的对象 parcelables 在 Activity 之间移动。我在服务器中使用休眠,所以我的类将哈希集作为属性,但我不知道如何打包。

这是我的代码和我的尝试...但我不知道它是否可以,我不知道如何将 el 写入包裹。 另外我想知道我是否处理好 DATE 的包裹和我的其他对象作为属性

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

最佳答案

我很确定它不会工作,主要是因为 Set 不是 Map。更好的方法是使用 Set.toArray 方法从集合中获取对象数组并使用 Parcel.writeTypedArray将其写入包裹。然后您可以只读取数组并在重新创建对象时自己填充 Set。这将要求您的 iTarea 类也实现 Parcelable,但与尝试将 HashSet 作为 HashMap.

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

关于android - 如何将哈希集与自定义对象打包在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15102608/

相关文章:

android - android 中的滑动菜单在打开和关闭时卡住

android - 无法在 Android 应用程序中从 Microsoft Intune 获取应用程序配置策略

Java:检索列表中值的最佳方法

java - 使用TreeSet对JList进行排序

java - Hashset、Treeset 和 LinkedHashset、Hashmap 之间的主要区别是什么?它在 Java 中如何工作?

overloading - 在 Perl 6 中使用自定义散列函数设置/散列

android - 华为设备: The meta-data tag in your app's AndroidManifest. xml没有正确的值

android - 如何从 Activity 调用另一个 Activity 中的方法

java - 使用 jxl API 将 HashMap 打印到 Excel

Java Hashmap如何处理单词网格的键冲突