Проблема SingleLiveEvent после перехода на AndroidX - PullRequest
0 голосов
/ 11 декабря 2018

После перехода на AndroidX с помощью Android studio 3.2.1 я не могу запустить приложение из-за этой ошибки:

SingleLiveEvent.java:29: error: name clash: observe(LifecycleOwner,Observer<T#1>) in SingleLiveEvent and observe(LifecycleOwner,Observer<? super T#2>) in LiveData have the same erasure, yet neither overrides the other
    public void observe(LifecycleOwner owner, final Observer<T> observer) {
                ^
  where T#1,T#2 are type-variables:
    T#1 extends Object declared in class SingleLiveEvent
    T#2 extends Object declared in class LiveData
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Я погуглил и нашел решения для других вещей, но как решить эту проблему элегантно?Я не хочу проводить рефакторинг целого приложения в каждом месте, где я использую одно событие в прямом эфире.

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Я искал это решение в Котлине:

override fun observe(@NonNull owner: LifecycleOwner, @NonNull observer:Observer<in T>)

0 голосов
/ 11 декабря 2018

Я нашел проблему.LiveData обеспечивает это:

public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer)

, тогда как SingleLiveEvent предоставляет:

public void observe(LifecycleOwner owner, final Observer<T> observer)

Решение состоит в том, чтобы изменить сигнатуру метода в SingleLiveEvent для соответствия LiveData

...