Firebase «ничего не отменяет» после обновления зависимостей - PullRequest
0 голосов
/ 25 февраля 2019

После обновления зависимостей до последних версий (ядро, аутентификация, база данных ...) мы получаем 500+ ошибок в нашем более старом (2018) Android-приложении, работающем на производстве.

Например,

"Object is not abstract and does not implement abstract member @PublicApi public abstract fun onDataChange(@NonNull p0: DataSnapshot): Unit defined in com.google.firebase.database.ValueEventListener"
"Type mismatch: inferred type is String? but String was expected"
"Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type DatabaseReference?"
"Smart cast to 'String' is impossible, because 'order.locationId' is a mutable property that could have been changed by this time"
"Type inference failed: Cannot infer type parameter K in inline operator fun <K, V> MutableMap<K, V>.set(key: K, value: V): Unit"
....

В этом мире нет никакого способа, которым мы будем построчно удалять только «?»или добавьте '!!'в целом проект, не говоря уже о тестировании и внедрении обновления в производство .....

Есть ли способ исправить это, или нам просто нужно придерживаться зависимостей 2018 и SDK 27, потому что, вы знаете, это просто обычная вещь Google ?

РЕДАКТИРОВАТЬ:

  • Объект не абстрактный и не реализует абстрактный член @PublicApi public abstract fun onCancelled (@NonNull p0: DatabaseError): единица, определенная в com.google.firebase.database.ValueEventListener

    private val connectionListener = object : ValueEventListener {
    override fun onCancelled(p0: DatabaseError?) {
    }
    
    override fun onDataChange(p0: DataSnapshot?) {
    
        connected = p0?.getValue(Boolean::class.java)!!
    
        if (connected) {
    
            disconnectReference?.child(resources.getString(R.string.offline))?.setValue(false)
            disconnectReference?.child(resources.getString(R.string.offline))?.onDisconnect()?.setValue(true) { error, _ ->
                if (error != null)
                    Log.e(this@ApplicationInventoryManagement.javaClass.simpleName, resources.getString(R.string.on_disconnect_event))
            }
            disconnectReference?.child(resources.getString(R.string.last_sync))?.onDisconnect()?.setValue(ServerValue.TIMESTAMP)
    
        }
    
    }
    

    }

Исправлено удаление «?»из переопределенных параметров методов, то же самое на 100+ местах в проекте

  • Ошибка вывода типа: невозможно определить параметр типа K во встроенном операторе fun MutableMap.set (ключ: K, значение: V): Единица измерения

    private val productEventListener = object : EventListenerWithBroadcast() {
    
    override fun onDataChange(dataSnapshot: DataSnapshot) {
    
        productsLoaded = false
        val productChange = Intent(ApplicationInventoryManagement.FIREBASE_DATA_CHANGE)
    
        doAsync {
    
            dataSnapshot.children
                    .filterNotNull()
                    .forEach { products!![it.key] = it.getValue(Product::class.java)!! }
    
            if (sendBroadcast) {
    
                productChange.putExtra(ApplicationInventoryManagement.TYPE, ApplicationInventoryManagement.PRODUCTS)
                LocalBroadcastManager.getInstance(this@ActivityMain).sendBroadcast(productChange)
    
            }
            productsLoaded = true
    
        }
    
    }
    
    override fun onCancelled(databaseError: DatabaseError) {}
    

    }

исправлено добавление '!!'сопоставить ключ "products !! [it.key !!]", потому что теперь он не хочет быть обнуляемым

  • Только безопасный (?.) или ненулевой заявленный (!!.) вызовы разрешены на обнуляемом получателе типа DatabaseReference?

    ref.parent.child("selected").setValue(false)

исправлено добавление '?'после родительского "ref.parent? .child ...", потому что теперь он хочет быть обнуляемым или ненулевым, утверждаемым с помощью '!!'

  • Несоответствие типов: выведенный тип - String?но ожидалось, что строка

                    val key = FirebaseDatabase.getInstance().getReference(Constants.vehicles)
                        .child(vehicleKey)
                        .child("log")
                        .push().key
    

исправляет добавление '!!'на первом дочернем ключе ".child (vehicleKey !!) ..." и т. д. *

...