将哈希图存储在数组中,反之亦然

时间:2019-02-27 00:35:17

标签: android firebase google-cloud-firestore

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

模型类

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

将数据发送到消防功能

 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

1 个答案:

答案 0 :(得分:1)

一旦您以HashMap的形式从Cloud Firestore接收到了现场数据,就将所有键和值交替映射到Array中,如下所示。所有键都在偶数位置,所有值都在奇数位置

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

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

您可以使用HashMap.keySet()获取所有键作为Set,然后使用HashMap.get(key)获取相应的值来完成此操作。如图所示,将其馈入Array中,您就可以开始了。

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

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

要从HashMap生成Array,请按照上述格式格式化Array并使用HashMap.put(key, value)

问题是,所有HashMap都可以存储为Array,但始终都不能将数组存储为HashMap

编辑:忘记回答添加到Firestore的事情

图像中显示的tripList字段是HashMap数组。只需创建具有Array数据类型的Object并使用HashMap s加载它们,如图所示。

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

现在,通过以下命令将此阵列加载到Cloud Firestore中

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

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

希望这会有所帮助..!