firebasekotlinfirebase-realtime-database

Modifier 'override' is not applicable to 'local function'


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


Solution

  • 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)
                    }
                  } // <--- the missing brace
               }
    
                override fun onCancelled(databaseError: DatabaseError) {
                    // Getting Post failed, log a message
                    Log.w("Category", "loadCat:onCancelled", databaseError.toException())
    
                }
            }
    

    You have a missing brackets