我目前正在开发一个使用 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) {
}
});
}
最佳答案
从 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 数组 只需创建一个 Array
和 Object
数据类型并用 加载它们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/