Активность не может быть преобразована в LifecycleOwner

Я хотел бы использовать Room с LiveData, и в других проектах я уже использовал его, но в этом я не могу заставить его работать. Он не может преобразовать мою активность в активность жизненного цикла, когда я пытаюсь наблюдать за живыми данными, однако я использую AppCompatActivity и даже пытался переопределить метод getLifecycle (который работал у меня в предыдущих проектах). Я даже пробовал с AndroidX, но все та же проблема :(

Здесь моя деятельность (часть ее):

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleRegistry;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

private LifecycleRegistry mLifecycleRegistry;

public class actMain extends AppCompatActivity  {

 @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mLifecycleRegistry = new LifecycleRegistry(this);
    mLifecycleRegistry.markState(Lifecycle.State.CREATED);
}
  @Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
    //Firebase
    db = FirebaseFirestore.getInstance();

    mLifecycleRegistry.markState(Lifecycle.State.STARTED);

    alarmViewModel = ViewModelProviders.of(this).get(AlarmViewModel.class);

    alarmViewModel.getAlarmList().observe(actMain.class, new 
    Observer<List<Alarm>>() {
        @Override
        public void onChanged(@Nullable List<Alarm> alarms) {

        }
    });
}
@NonNull
@Override
public Lifecycle getLifecycle() {
    return mLifecycleRegistry;
}

Вот мой файл градиента:

implementation 'androidx.room:room-runtime:2.0.0-alpha1'
annotationProcessor 'androidx.room:room-compiler:2.0.0-alpha1'
implementation 'com.google.android.material:material:1.0.0-alpha3'
implementation  'androidx.lifecycle:lifecycle-viewmodel:2.0.0-alpha1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

А вот и мой Дао:

@Dao
public interface AlarmDao {

    @Query("SELECT * FROM alarm")
    LiveData<List<Alarm>> getAllAlarm();

    @Insert
    void insert(Alarm... alarms);

    @Update
    void update(Alarm... alarms);

    @Delete
    void delete(Alarm... alarms);

}

Я пробовал все предложения здесь, включая мое, но я не могу понять, в чем проблема в этом случае.

Изменить: добавлен код


person Kőne Mátyás    schedule 21.06.2018    source источник
comment
Вы расширили AppCompatActivity?   -  person EpicPandaForce    schedule 21.06.2018
comment
Да, конечно, я забыл добавить эту часть в свой код.   -  person Kőne Mátyás    schedule 21.06.2018
comment
Поддержка библиотеки 27 или 28? Хотя вроде бы androidx так наверное 28   -  person EpicPandaForce    schedule 22.06.2018
comment
Да, поэтому я совсем потерялся, я смотрю на два проекта, один работает, а другой нет...   -  person Kőne Mátyás    schedule 22.06.2018


Ответы (2)


Вам не нужно использовать

mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);

Так как новый AppcompatActivity это уже lifecyclerOwner.

Вы также наблюдаете объект класса, что неверно. actMain.class — это объект класса. Вы должны иметь:

alarmViewModel.getAlarmList().observe(this, new Observer<List<Alarm>>() {
     @Override
     public void onChanged(@Nullable List<Alarm> alarms) {}
});
person Ioane Sharvadze    schedule 22.06.2018
comment
Я чувствую себя очень глупо, знаю ... но в любом случае большое спасибо за вашу помощь! :) - person Kőne Mátyás; 22.06.2018

Обновите до последней версии. Ниже приведена ссылка на мой проект AppCompatActivity, который теперь наследуется от LifecycleOwner, и вы можете сразу реализовать необходимую функциональность.

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.1'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'org.jetbrains.anko:anko:0.10.8'
implementation 'com.github.debop:koda-time:1.2.1'


implementation 'androidx.annotation:annotation:1.0.2'
implementation "androidx.legacy:legacy-support-core-utils:1.0.0"


// Room components
implementation "androidx.room:room-runtime:2.0.0"
annotationProcessor "androidx.room:room-compiler:2.0.0"

// Lifecycle components
implementation "androidx.lifecycle:lifecycle-runtime:2.0.0"
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.0.0"

// Coroutines
implementation  "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"
implementation  "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"

Проверьте, например, здесь https://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin/#13

Также вы можете сослаться на пример Basic по адресу https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample

person Tejasvi Hegde    schedule 09.03.2019