0
votes

I'm getting the following error when using firebase realtime datqabase in android

 val catListener =  object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if (dataSnapshot.exists()) {
                // Get Post object and use the values to update the UI
                for (eventSnapshot in dataSnapshot.children) {
                    val name = eventSnapshot.child("name").getValue() as String
                    list.add(Category(name));
                }

                var adp = CategoryAdapter(list);
                cat_rv.adapter = adp

                adp.onItemClick = { pos, view ->

                    i.putExtra("category", list[pos].name)
                    startActivity(i)
                }
            }

            override fun onCancelled(databaseError: DatabaseError) {
                // Getting Post failed, log a message
                Log.w("Category", "loadCat:onCancelled", databaseError.toException())

            }
        }

Errors--

Modifier 'override' is not applicable to 'local function' (refers to object: ValueListener

Object is not abstract and does not implement abstract member public abstract fun onCancelled(@NonNull p0: DatabaseError): Unit defined in com.google.firebase.database.ValueEventListener

2

2 Answers

1
votes

You're missing all kinds of syntax - mostly closing braces. This is minimally what gets you to valid Kotlin syntax.

    val catListener =  object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if (dataSnapshot.exists()) {
                // Get Post object and use the values to update the UI
                for (eventSnapshot in dataSnapshot.children) {
                }
            }
        }

        override fun onCancelled(databaseError: DatabaseError) {
            // Getting Post failed, log a message
            Log.w("Category", "loadCat:onCancelled", databaseError.toException())

        }
1
votes

Change this:

 val catListener =  object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if (dataSnapshot.exists()) {
                // Get Post object and use the values to update the UI
                for (eventSnapshot in dataSnapshot.children) {
                    val name = eventSnapshot.child("name").getValue() as String
                    list.add(Category(name));
                }

                var adp = CategoryAdapter(list);
                cat_rv.adapter = adp

                adp.onItemClick = { pos, view ->

                    i.putExtra("category", list[pos].name)
                    startActivity(i)
                }
            }

            override fun onCancelled(databaseError: DatabaseError) {
                // Getting Post failed, log a message
                Log.w("Category", "loadCat:onCancelled", databaseError.toException())

            }
        }

into this:

 val catListener =  object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            if (dataSnapshot.exists()) {
                // Get Post object and use the values to update the UI
                for (eventSnapshot in dataSnapshot.children) {
                    val name = eventSnapshot.child("name").getValue() as String
                    list.add(Category(name));
                }

                var adp = CategoryAdapter(list);
                cat_rv.adapter = adp

                adp.onItemClick = { pos, view ->

                    i.putExtra("category", list[pos].name)
                    startActivity(i)
                }
              }
           }

            override fun onCancelled(databaseError: DatabaseError) {
                // Getting Post failed, log a message
                Log.w("Category", "loadCat:onCancelled", databaseError.toException())

            }
        }

You have a missing brackets