簡體   English   中英

代碼僅從 Firebase 中的數據中檢索一個值

[英]Code only retrieving one value from data in Firebase

正如標題所示,我正在嘗試從 firebase 數據庫中檢索一些數據,但我的代碼無法正常工作。 我在名為“標題”、“描述”和“用戶名”的“帖子”中有三個孩子(我想你就是這樣稱呼他們的),我試圖將所有這些孩子和 append 放入一個變量中,以便以后使用它們,但它只檢索每個值的第一個值,盡管事實上有 5 個值。 有誰知道為什么? 順便說一句,我在我的 ViewDidLoad 上調用這個 function。

let postDB = Database.database().reference().child("Posts")
postDB.queryOrderedByKey().observeSingleEvent(of: .value) { (snapshot) in
    if let snapshotValue = snapshot.value as? NSDictionary {

    let postTitle = snapshotValue["title"] as? String
    let postUsername = snapshotValue["username"] as? String
    let postDesc = snapshotValue["description"] as? String

    let postArray = postStruct(title: postTitle, description: postDesc, username: postUsername)
    self.newPost.insert(postArray, at: 0)

    }

我的 Firebase 數據庫。

試試看–該代碼將替換您當前在快照處理程序中擁有的代碼。

if let firebaseList = snapshot.children.allObjects as? [FIRDataSnapshot] {
        if let swiftList = snapshot.value as? [String:AnyObject] {
            for firebaseItem in firebaseList {
                let childID = firebaseItem.key as String
                let swiftItem = swiftList[childID]
                let postTitle = swiftItem?["title"] as? String
                let postUsername = swiftItem?["username"] as? String
                let postDesc = swiftItem?["description"] as? String
                let postArray = postStruct(title: postTitle, description: postDesc, username: postUsername)
                self.newPost.insert(postArray, at: 0)
            }
        }
    }
}
import UIKit
import FirebaseDatabase

class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    // MARK: - variables
    var postDB: DatabaseReference!

    override func viewDidLoad() {
        super.viewDidLoad()

        // getting a node from database //
        postDB = Database.database().reference().child("Posts")

        // observing data changes //
        postDB.observe(DataEventType.value) { (dataSnapshot) in
            self.postArray.removeAll()
            if dataSnapshot.childrenCount > 0 {
                for post in dataSnapshot.children.allObjects as! [DataSnapshot] {
                    let object = post.value as! [String: Any]
                    let description = object["description"] as! String
                    let title = object["title"] as! String
                    let userName = object["username"] as! String
                    let model = postStruct(title: title, description: description, username: userName))
                    self.postArray.append(model)
                }
            }
            self.tableView.reloadData()
        }
    }
}

為我工作。 它獲得了所有的值,現在你只需要將它們放在一個數組中

postDB.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
            @Override
            public void onComplete(@NonNull @NotNull Task<DataSnapshot> task) {
                if(!task.isSuccessful()){
                    Log.e("firebase", "Error getting data; ", task.getException());
                }else{

                    Log.d("firebase", String.valueOf(task.getResult().getValue()));
                }
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM