我目前正在使用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) {
}
});
}
答案 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
的数组,以防止出现错误
希望这会有所帮助..!