My Main Activity is like this
private lateinit var database:FirebaseDatabase
private lateinit var reference: DatabaseReference
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
database = FirebaseDatabase.getInstance()
reference = database.getReference("Users")
val btnTwo: Button = findViewById(R.id.button2)
btnTwo.setOnClickListener {
startActivity(Intent(applicationContext, Results::class.java))
}
val btn: Button = findViewById(R.id.button)
btn.setOnClickListener {
sendData()
}
}
private fun sendData()
{
val name = findViewById<EditText>(R.id.et_name).text.toString().trim()
val notes = findViewById<EditText>(R.id.et_notes).text.toString().trim()
if (name.isNotEmpty()&¬es.isNotEmpty())
{
val model = DatabaseModel(name, notes)
val id = reference.push().key
reference.child(id!!).setValue(model)
findViewById<EditText>(R.id.et_name).setText("")
findViewById<EditText>(R.id.et_notes).setText("")
}
else{
Toast.makeText(applicationContext, "All fields required",Toast.LENGTH_LONG).show()
}
}
My DatabaseModel is like this
class DatabaseModel(var name: String, var notes: String) {
}
My Adapter is like this
class DataAdapter (private val list: ArrayList<DatabaseModel>)
:RecyclerView.Adapter<DataAdapter.ViewHolder>() {
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
var nName: TextView = itemView.findViewById(R.id.tvName)
var nNotes: TextView = itemView.findViewById(R.id.tvNotes)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.recycler_card,parent,false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.nName.text = list[position].name
holder.nNotes.text = list[position].notes
}
override fun getItemCount(): Int {
return list.size
}
}
My Results Activity
class Results : AppCompatActivity() {
private lateinit var mRecyclerView: RecyclerView
private lateinit var database: FirebaseDatabase
private lateinit var reference: DatabaseReference
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_results)
database = FirebaseDatabase.getInstance()
reference = database.getReference("Users")
mRecyclerView = findViewById(dataRecyclerview)
getData()
}
private fun getData() {
reference.addValueEventListener(object :ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
val list = ArrayList<DatabaseModel>()
for (data in snapshot.children){
val model = data.getValue(DatabaseModel::class.java)
list.add(model as DatabaseModel)
}
if (list.size > 0){
val adapter = DataAdapter(list)
mRecyclerView.adapter = adapter
}
}
override fun onCancelled(error: DatabaseError) {
Log.e("cancel", error.toString())
}
})
}
}
The crash stack
2021-01-15 22:21:24.352 7066-7066/com.munopa.fireman E/RecyclerView: No adapter attached; skipping layout 2021-01-15 22:21:24.671 7066-7066/com.munopa.fireman D/AndroidRuntime: Shutting down VM 2021-01-15 22:21:24.674 7066-7066/com.munopa.fireman E/AndroidRuntime: FATAL EXCEPTION: main Process: com.munopa.fireman, PID: 7066 com.google.firebase.database.DatabaseException: Class com.munopa.fireman.DatabaseModel does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped. at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:570) at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:563) at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:433) at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232) at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80) at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203) at com.munopa.fireman.Results$getData$1.onDataChange(Results.kt:35) at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75) at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63) at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 2021-01-15 22:21:24.689 7066-7066/com.munopa.fireman I/Process: Sending signal. PID: 7066 SIG: 9