Menu
Who Do Is
  • Home
  • What
  • How
  • Is
  • Can
  • Are
  • Does
  • Do
  • Why
  • Who
  • Where
  • Which
  • Which
  • Should
  • Will
  • When
  • What’s
  • Did
Who Do Is

[ANSWERED] android – Can we retrieve firebase data into spinner?

Posted on November 14, 2022

Solution 1 :

Your spinner shows no value because the data is not retrieved yet from the DB.

So what you should do is create a callback from FirebaseHelper to IncomeFragment

First, create a callback

interface FirebaseHelperCallback {
    fun dataRetrievedFromDB(data: List<String>)
}

Second, create a variable, setter function and call dataRetrievedFromDB function in FirebaseHelper class

class FirebaseHelper(val db: DatabaseReference) {
   private lateinit var firebaseHelperCallback: FirebaseHelperCallback

    fun setFirebaseHelperCallback(firebaseHelperCallback: FirebaseHelperCallback) {
        this.firebaseHelperCallback = firebaseHelperCallback
    }

    ...

    private fun fetchData(snapshot: DataSnapshot, bankData: ArrayList<String>) {
       bankData.clear()
       val name: BankData? = snapshot.getValue(BankData::class.java)
       bankData.add(bankData.toString())
       firebaseHelperCallback.dataRetrievedFromDB(bankData)
    }
}

Lastly, implement the callback in IncomeFragment

class IncomeFragment: Fragment(), FirebaseHelperCallback {


   override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
   ): View? {
      ...
      helper.setFirebaseHelperCallback(this)
   }

   ...

   override fun dataRetrievedFromDB(data: List<String>) {
        spinner.setAdapter(
           activity?.let {
             ArrayAdapter<String>(
                it,
                android.R.layout.simple_list_item_1,
                data
             )
           }
        )
   }
}

Problem :

I have added firebase database and the data also gets saved into the firebase realtime database, but it doesnot gets shown into the spinner, my spinner is showing no value.If theres some other way?

This is the code of my fragment:

class IncomeFragment: Fragment(){

//FAB
lateinit var addBankFab: FloatingActionButton
lateinit var addBankText: TextView

//Spinner
lateinit var spinner: Spinner
lateinit var dropDown: TextView

//Firebase Database
lateinit var mAuth: FirebaseAuth
lateinit var mIncomeDatabase: DatabaseReference
lateinit var mBankDatabase: DatabaseReference
lateinit var helper: FirebaseHelper

//Recycler View
lateinit var recyclerView: RecyclerView

//TextView
lateinit var incomeTotal : TextView

//Update Edit Text
lateinit var editAmount: EditText
lateinit var editType: EditText
lateinit var editNote: EditText
lateinit var editBankName:EditText

//Button for update and delete
lateinit var btnUpdate: Button
lateinit var btnDelete: Button
lateinit var btnSave : Button
lateinit var btnCancel:Button

//Data item Value

lateinit var type: String
lateinit var note: String
var amount: Int = 0
lateinit var post_key:String
lateinit var name:String
lateinit var ac:String

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    val myview= inflater.inflate(R.layout.fragment_income, container, false)
    mAuth= FirebaseAuth.getInstance()
    val mUser = mAuth.currentUser
    val uid = mUser?.uid

    addBankFab=myview.findViewById(R.id.add_bank_fab)
    addBankText=myview.findViewById(R.id.add_bank_text)


    spinner=myview.findViewById(R.id.incomeSpinner)

    mIncomeDatabase =
        FirebaseDatabase.getInstance().reference.child("IncomeData").child(uid.toString())
    incomeTotal=myview.findViewById(R.id.income_txt_result)

    mBankDatabase= FirebaseDatabase.getInstance().reference.child("BankData").child(uid.toString())


    helper = FirebaseHelper(mBankDatabase)

    spinner.setAdapter(
        activity?.let {
            ArrayAdapter<String>(
                it,
                android.R.layout.simple_list_item_1,
                helper.retrieve()
            )
        }
    )

    recyclerView=myview.findViewById(R.id.incomeRecyclerView)
    val layoutManager = LinearLayoutManager(activity)
    layoutManager.reverseLayout = true
    layoutManager.stackFromEnd = true
    recyclerView.setHasFixedSize(true)
    recyclerView.layoutManager = layoutManager

    mIncomeDatabase.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            var totalvalue :Int = 0
            for (ds in dataSnapshot.children) {
                val data: Data = ds.getValue<Data>(Data::class.java)!!
                totalvalue+=data.amount
                val stTotalValue:String = valueOf(totalvalue)

                incomeTotal.text = stTotalValue+".00"

            }

        }

        override fun onCancelled(databaseError: DatabaseError) {}
    })


    return myview

}




private fun insertBank() {
    val bankdialog = AlertDialog.Builder(activity)
    val inflater = LayoutInflater.from(activity)
    val view: View = inflater.inflate(R.layout.add_bank_layout, null)
    bankdialog.setView(view)
    val dialog = bankdialog.create()
    dialog.setCancelable(false)

    val BankName = view.findViewById<EditText>(R.id.account_bank)
    val BankAc = view.findViewById<EditText>(R.id.account_number)
    val btnSaveBank = view.findViewById<Button>(R.id.btn_save_bank)
    val btnCancelBank = view.findViewById<Button>(R.id.btn_cancel_bank)

    btnSaveBank.setOnClickListener {

        val name = BankName.text.toString().trim()
        val ac = BankAc.text.toString().trim()


        if (TextUtils.isEmpty(name)) {
            BankName.error = "Required Field..."
            [email protected]
        }

        if (TextUtils.isEmpty(ac)) {
            BankAc.error = "Required Field..."
            [email protected]
        }

        val bankacno = ac.toInt()


        val id: String? = mBankDatabase.push().key
        val mDate: String = DateFormat.getDateInstance().format(Date())
        val bankdata = EmiData(bankacno, name, id, mDate)
        mBankDatabase.child(id.toString()).setValue(bankdata)
        Toast.makeText(activity, "DATA ADDED", Toast.LENGTH_SHORT).show()


        dialog.dismiss()

    }

    btnCancelBank.setOnClickListener {
        dialog.dismiss()

    }

    dialog.show()
}

override
fun onStart() {
    super.onStart()
    val options = FirebaseRecyclerOptions.Builder<Data>()
        .setQuery(mIncomeDatabase, Data::class.java)
        .setLifecycleOwner(this)
        .build()
    val firebaseRecyclerAdapter: FirebaseRecyclerAdapter<Data, MyViewHolder> =
        object : FirebaseRecyclerAdapter<Data, MyViewHolder>(options) {
            override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
                return MyViewHolder(
                    LayoutInflater.from(parent.context)
                        .inflate(R.layout.income_recycler_data, parent, false)
                )
            }

            override fun onBindViewHolder(holder: MyViewHolder, position: Int, model: Data) {

                holder.setType(model.type)
                holder.setAmount(model.amount)
                holder.setDate(model.date)
                holder.setNote(model.note)

                holder.mView.setOnClickListener {

                    post_key= getRef(position).key.toString()

                    type=model.type
                    note=model.note
                    amount=model.amount

                    updateDataItem()
                    }

            }

        }
    recyclerView.adapter = firebaseRecyclerAdapter
}

class MyViewHolder(itemView: View) : ViewHolder(itemView) {
    val mView = itemView

    fun setType(type: String) {
        val mType = mView.findViewById<TextView>(R.id.type_txt_income)
        mType.text = type
    }
    fun setNote(note: String) {
        val mNote = mView.findViewById<TextView>(R.id.note_txt_income)
        mNote.text = note
    }
    fun setDate(date: String) {
        val mDate = mView.findViewById<TextView>(R.id.date_txt_income)
        mDate.text = date
    }
    fun setAmount(amount: Int) {
        val mAmount = mView.findViewById<TextView>(R.id.amount_txt_income)
        val stAmount = valueOf(amount)
        mAmount.text = stAmount
    }



}

private fun updateDataItem() {
    val mydialog = AlertDialog.Builder(activity)
    val inflater = LayoutInflater.from(activity)
    val myView: View = inflater.inflate(R.layout.update_data_item, null)
    mydialog.setView(myView)
    val dialog = mydialog.create()

    val editAmount = myView.findViewById<EditText>(R.id.amount_edit)
    val editType = myView.findViewById<EditText>(R.id.type_edit)
    val editNote = myView.findViewById<EditText>(R.id.note_edit)

    //Set data to edit text..

    editType.setText(type)
    editType.setSelection(type.length)

    editNote.setText(note)
    editNote.setSelection(note.length)

    editAmount.setText(valueOf(amount))
    editAmount.setSelection(valueOf(amount).length)

    val btnUpdate = myView.findViewById<Button>(R.id.btn_update)
    val btnDelete = myView.findViewById<Button>(R.id.btn_delete)

    btnUpdate.setOnClickListener {
        type = editType.text.toString().trim()
        note = editNote.text.toString().trim()

        var mdAmount = amount.toString()
        mdAmount = editAmount.text.toString().trim { it <= ' ' }
        val myAmount = mdAmount.toInt()

        val mDate: String = DateFormat.getDateInstance().format(Date())
        val data = Data(myAmount, type, note, post_key, mDate)

        mIncomeDatabase.child(post_key).setValue(data)

        dialog.dismiss()


    }

    btnDelete.setOnClickListener {
        mIncomeDatabase.child(post_key).removeValue()

        dialog.dismiss()
    }
    dialog.show()
}
}

This is my firebase helper:

READ  [ANSWERED] java - SQLite “after update” trigger in Android does not appear to run after every record update
Powered by Inline Related Posts

class FirebaseHelper(val db: DatabaseReference) {
private var saved: Boolean? = null

//SAVE
fun save(bankData: BankData?): Boolean? {
    saved = if (bankData == null) {
        false
    } else {
        try {
            db.child("name").push().setValue(bankData)
            true
        } catch (e: DatabaseException) {
            e.printStackTrace()
            false
        }
    }
    return saved
}

//READ
fun retrieve(): ArrayList<String> {
    val bankNames = ArrayList<String>()
    db.addChildEventListener(object : ChildEventListener {
        override fun onChildAdded(
            dataSnapshot: DataSnapshot,
            s: String?
        ) {
            fetchData(dataSnapshot, bankNames)
        }

        override fun onChildChanged(
            dataSnapshot: DataSnapshot,
            s: String?
        ) {
            fetchData(dataSnapshot, bankNames)
        }

        override fun onChildRemoved(dataSnapshot: DataSnapshot) {}
        override fun onChildMoved(
            dataSnapshot: DataSnapshot,
            s: String?
        ) {
        }

        override fun onCancelled(databaseError: DatabaseError) {}
    })
    return bankNames
}

private fun fetchData(
    snapshot: DataSnapshot,
    bankData: ArrayList<String>
) {
    bankData.clear()
    val name: BankData? = snapshot.getValue(BankData::class.java)
    bankData.add(bankData.toString())
    }


}

Comments

Comment posted by Franz Andel

Have you debugged it? did

Recent Posts

  • How can I play with my cat without toys?
  • What is a bag pipe band called?
  • Are Honda Civics actually fast?
  • Are Yankee candles toxic?
  • How do I pair my Michael Kors smartwatch with my Android?

Recent Comments

No comments to show.

Archives

  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022

Categories

  • ¿Cómo
  • ¿Cuál
  • ¿Cuántas
  • ¿Cuánto
  • ¿Que
  • ¿Quién
  • 90” and 108” so you may have to round up to the nearest size.
  • and delete any Spotify folders from it. Once this is done
  • Android
  • Are
  • At
  • Bei
  • blink
  • C'est
  • Can
  • carbs
  • Comment
  • Did
  • Do
  • Does
  • During
  • For
  • Has
  • How
  • In
  • Is
  • Ist
  • Kann
  • Können
  • nouveau
  • On
  • or 108 inches.2020-08-03
  • Où
  • owning
  • Pourquoi
  • Puis-je
  • Quand
  • Quante
  • Quel
  • Quelle
  • Quelles
  • Quels
  • Qui
  • Should
  • Sind
  • Sollte
  • spiritual
  • tap the downward-facing arrow on the top left. A downward-facing arrow will appear underneath each song in the album; they'll turn green as the download completes.2020-07-28
  • Uncategorized
  • Wann
  • Warum
  • Was
  • Welche
  • Welcher
  • Welches
  • Welke
  • Wer
  • Were
  • What
  • What's
  • When
  • Where
  • Which
  • Who
  • Whose
  • Why
  • Wie
  • Will
  • Wo
  • Woher
  • you will receive two curtains each with the same measurements of width 66"" (168cm) x drop 54""(137cm).
  • you'll see a green downward-facing arrow next to each song.2021-02-26
©2023 Who Do Is | Powered by SuperbThemes & WordPress