После обновления зависимостей до последних версий (ядро, аутентификация, база данных ...) мы получаем 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 !!]", потому что теперь он не хочет быть обнуляемым
исправлено добавление '?'после родительского "ref.parent? .child ...", потому что теперь он хочет быть обнуляемым или ненулевым, утверждаемым с помощью '!!'
Несоответствие типов: выведенный тип - String?но ожидалось, что строка
val key = FirebaseDatabase.getInstance().getReference(Constants.vehicles)
.child(vehicleKey)
.child("log")
.push().key
исправляет добавление '!!'на первом дочернем ключе ".child (vehicleKey !!) ..." и т. д. *