SAM
SAM

Reputation: 17

Unable to download firebase database to my app

I am new to programming in swift. I am trying to make an app which downloads student data from firebase database. I am unable to get the app running. This is my JSON file:

{"classA":[
{
"name": "Student1",
"USN": "1DS16CS095"
},
{
"name": "student2",
"USN": "1DS16CS065"
},
{
"name":"student3",
"USN":"1DS16CS047"
}
]
}

This is my code to download the above JSON file and put it in tableView. Modelstudent is my class where I have my variables name and USN stored. and marksstudentlistTableViewCell is the class I am using to manipulate the labels of my prototype cell.

import UIKit
import Firebase
import FirebaseDatabase

struct StudentData {
let StudentName : String
let StudentUSN : String
}

class marksstudentlist: UIViewController, UITableViewDelegate, UITableViewDataSource{

var FetchedStudentIDs = [StudentData]()

@IBOutlet weak var tableView: UITableView!
var ref: DatabaseReference!
var _selectedsub: Int!
var selectedsub: Int {
    get {
        return _selectedsub
    }set {
        _selectedsub = newValue
    }
}

    override func viewDidLoad() {
        tableView.delegate = self
        tableView.dataSource = self
        if(classselected==0){
        ref = Database.database().reference().child("classA")
        ref.observe(DataEventType.value, with: { (snapshot) in
            if snapshot.childrenCount>0{
                for students in snapshot.children.allObjects as! [DataSnapshot]{
                    let studentObject = students.value as? [String: String]
                    let studentname = studentObject?["name"]
                    let studentUSN = studentObject?["USN"]
                    let student = Modelstudent(name: studentname , USN: studentUSN)
                    self.FetchedStudentIDs.insert(StudentData(StudentName :(studentname as? String!)! , StudentUSN : (studentUSN as? String!)! ) , at: 0)
                }
                self.tableView.reloadData()
            }
        })
  }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return FetchedStudentIDs.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath:  IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier:     "marksstudentlistcell", for: indexPath) as! marksstudentlistTableViewCell

    cell.namelbl.text = FetchedStudentIDs[indexPath.row].StudentName//    Student name comes from Firebase
    cell.USNlbl.text = FetchedStudentIDs[indexPath.row].StudentUSN
    return cell
}

    @IBAction func backbtn(_ sender: Any) {
    dismiss(animated: true, completion: nil)
}
}

Upvotes: 0

Views: 150

Answers (1)

Caplin YT
Caplin YT

Reputation: 265

Using Swift Struct is the best way to get your firebase data inside the tableView,

Let's Get started

on your TableView swift file, above the class and stuff paste this

   Struct StudentData {
   let StudentObject : String // If it's
   let StudentName : String // It returns a string right?
   let StudentUSN : String
                   // do the others.
}

okay so then create a var just down below the class call it

var FetchedStudentIDs = [StudentData]()

then you got the reading method from firebase

     ref = Database.database().reference().child("classA")
            ref.observe(DataEventType.value, with: { (snapshot) in
                if snapshot.childrenCount>0{
                    self.studentslist.removeAll()
                    for students in snapshot.children.allObjects as! [DataSnapshot]{
                        let studentObject = students.value as? [String: AnyObject]
                        let studentname = studentObject?["name"]
                        let studentUSN = studentObject?["USN"]
                        let student = Modelstudent(name: studentname as! String?, USN: studentUSN as! String?) //storing in Modelstudent class
                        self. 
FetchedStudentIDs.insert(StudentData(studentname:StudentName as! String , studentUSN : StudentUSN as! String  ) , at: 0) // Student name comes from the struct Above, do the others as this
                    }
                    self.tableView.reloadData() // make sure you call this
                }
            })

return your tableView

    func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return FetchedStudentIDs.count
}

your CellForRowAtIndexPath

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

      let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell

 cell.exampleLabel.text = FetchedStudentIDs[Indexpath.row].StudentName// Student name comes from Firebase    
    return cell
}

Hope this Helps

Upvotes: 2

Related Questions