我想从云Firestore
获取地图数据,这是Java代码,我需要快速访问同一数据库。我附上了Java代码和数据库结构图片以供参考。
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference mDocRef = db.collection("hmdhAcademy").document("notifications");
mDocRef.get().addOnCompleteListener(task -> {
if ( task.isSuccessful() ) {
DocumentSnapshot documentSnapshot = task.getResult();
if ( documentSnapshot != null && documentSnapshot.exists() ){
notificationList = (ArrayList) documentSnapshot.get("userNotifications");
adapter = new NotificationAdapter(this,notificationList);
mRecyclerView.setAdapter(adapter);
alertDialog.dismiss();
}
}
else {
Toast.makeText(NotificationActivity.this,"Check Internet Connection",Toast.LENGTH_SHORT).show();
alertDialog.dismiss();
}
});
if ( list.get(i) instanceof HashMap ){
final Intent intent = new Intent(mContext,NotificationDetail.class);
String title = (String)((HashMap)list.get((list.size()-1)-i)).get("title");
String body = (String)((HashMap)list.get((list.size()-1)-i)).get("body");
String image = (String)((HashMap)list.get((list.size()-1)-i)).get("notiImage");
String detail = (String)((HashMap)list.get((list.size()-1)-i)).get("detail");
}
我需要相同的标题,正文,notiImage和详细信息。
请帮助我,我在任何地方都在寻找答案,但失败了。
答案 0 :(得分:1)
尝试此代码:
docRef.getDocument { (document, error) in
if let document = document, document.exists {
print(document.data()!)
let userNotifications = document.data()["userNotifications"] as? [[String:Any]]
for notificaton in userNotifications {
let body = notificaton["body"] as? String ?? ""
let title = notificaton["title"] as? String ?? ""
print(body, title)
}
} else {
print("Document does not exist")
}
}
或尝试这种方式:
创建结构
struct usernotifcatons {
var body: String = ""
var detail: String = ""
var notiImage: String = ""
var title: String = ""
init(notificationData: [String:Any]) {
let body = notificationData["body"] as? String ?? ""
self.body = body
let detail = notificationData["detail"] as? String ?? ""
self.detail = detail
let notiImage = notificationData["notiImage"] as? String ?? ""
self.notiImage = notiImage
let title = notificationData["title"] as? String ?? ""
self.title = title
}
}
在ViewController中创建一个变量:
var allNotifications: [usernotifcatons] = [usernotifcatons]()
将所有数据映射到您的Firestore代码中的一行中
docRef.getDocument { (document, error) in
if let document = document, document.exists {
print(document.data()!)
let userNotifications = document.data()?["userNotifications"] as? [[String:Any]]
for data in userNotifications! {
self.allNotifications.append(usernotifications(notificationData: data))
}
print(self.allNotifications)
} else {
print("Document does not exist")
}
}