android - 将 HashMap 存储在数组中,反之亦然

标签 android firebase google-cloud-firestore

我目前正在开发一个使用 firestore 云作为后端服务的应用程序。此外,我想将 HashMap 值存储到一个数组中,然后将其传递给数据库。以下代码已经实现,但仍然不符合我的需要。

模型类

public class TripsInfoModel {
private String Country, Region, Balance, Stutas, updateDate, UserID;
List<String> TripsData;

public TripsInfoModel() {
}

public TripsInfoModel(String country, String region, String balance, String stutas, String updateDate, String userID,List<String> tripsData) {
    Country = country;
    Region = region;
    Balance = balance;
    Stutas = stutas;
    this.updateDate = updateDate;
    UserID = userID;
    TripsData = tripsData;


}



public String getCountry() {
    return Country;
}

public String getRegion() {
    return Region;
}

public String getBalance() {
    return Balance;
}

public String getStutas() {
    return Stutas;
}

public String getUpdateDate() {
    return updateDate;
}

public String getUserID() {
    return UserID;
}

public List<String> getTripsData() {
    return TripsData;
}

发送数据到 fire-store 函数

 String startDate = startPickDate.getText().toString().trim();
    String EndDate = endPickDate.getText().toString().trim();
    String Country = CountryName.getText().toString().trim();
    String CityNmae = mCity.getText().toString().trim();
    int Balance = Integer.parseInt(TripBalance.getText().toString());
    String Dsc = mDec.getText().toString().trim();

    HashMap <String, String>TripList = new HashMap<>();
    TripList.put("From",startDate);
    TripList.put("End",EndDate);
    TripList.put("Note",Dsc);

    String [] data = (String[]) TripList.values().toArray();
    List<String> TripsData = Arrays.asList(data);




    if (startDate.equals("") || EndDate.equals("")
            || Country.equals("") || CityNmae.equals("") || Balance <= 0 || Dsc.equals("")) {
        Toast.makeText(DateAndTime2.this, "Please identify  the date ,  or filed is missed", Toast.LENGTH_SHORT).show();

    } else {
        TripsInfoModel addData = new TripsInfoModel(Country,CityNmae,Balance,"Available",CurrentTime,UID,TripsData);
        db.collection("TripsInfo").document(UID).collection("SeprateData").document()
                .set(addData).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()){
                    Toast.makeText(DateAndTime2.this, "Data has added successfully",Toast.LENGTH_SHORT).show();
                }

            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

            }
        });

    }

此外,附加的快照显示了我真正想要实现的目标 Triplist

最佳答案

从 Cloud Firestore 收到字段数据作为 HashMap 后,将所有键和值交替映射到 Array 中,如下所示。所有键都在偶数位置,所有值都在奇数位置

   0       1       2       3      . . .   n-1      n         <--- Index

| Key1 | Value1 | Key2 | Value2 | . . . | Keyn | Valuen |    <--- Array

您可以使用 HashMap.keySet() 将所有键作为一个 Set 获取,然后使用 HashMap.get(key) 获取相应的值。如图所示将其送入阵列,一切顺利。

请记住,Keyk 将位于 Array[k-1]Valuek 将位于 Array[k]。例如,Key7 将位于 Array[6],其对应的值 Value7 将位于 Array[7]

如果您想要一个特定的键并且您不知道它的索引,只需运行 Linear Search在 Array 上查找键,下一个索引是其对应的值。

要从 Array 生成一个 HashMap,如上所示格式化 Array 并使用 HashMap.put(key, value)

问题是,所有的 HashMap 都可以存储为数组,但是将数组存储为 HashMap 在任何时候都没有意义

编辑:忘记回答添加到 Firestore 的问题

图像中显示的 tripList 字段是一个 HashMap 数组 只需创建一个 ArrayObject 数据类型并用 加载它们HashMap 如图所示。

     0          1          2                  n
| HashMap0 | HashMap1 | HashMap2 | . . . | HashMapn |

现在,通过以下命令将这个数组加载到 Cloud Firestore

db.collection("TripsList").document(UID).update("tripList", HashMapArray);

请记住,Firestore 中需要有一个名为tripList 的数组,以防止出现错误

希望这有帮助..!

关于android - 将 HashMap 存储在数组中,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54896301/

相关文章:

android - Firebase 推送通知不起作用

angularjs - 在 AngularFire 中使用限制

firebase - 如何使用生产存储桶数据启动 Firebase 存储模拟器?

android - 更新 Android SDK : "A folder failed to be moved."

android - Spinner 无法加载整数数组?

android - 为什么 android studio 不为所有安全参数生成代码?

push-notification - 一次向多个(超过 3 个)主题发送 Firebase 云消息(又名推送通知)

flutter - 创建 ListView 并从 flutter 上的 firestore 获取数据

firebase - 如何在Firebase Cloud Firestore中查询集合中最接近的GeoPoint?

android - 创建 Android 联系人应用程序