Activity 无法转换为 LifecycleOwner

Kőn*_*yás 9 android activity-lifecycle android-room android-livedata

我想将 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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的gradle文件:

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'
Run Code Online (Sandbox Code Playgroud)

这是我的道:

@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);

}
Run Code Online (Sandbox Code Playgroud)

我在这里尝试了所有建议,包括我的,但我无法弄清楚在这种情况下是什么问题。

编辑:添加代码

Ioa*_*dze 5

你不需要使用

mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
Run Code Online (Sandbox Code Playgroud)

因为, newAppcompatActivity已经是lifecyclerOwner.

您还观察了类对象,这是不正确的。actMain.class是一个类对象。你应该有:

alarmViewModel.getAlarmList().observe(this, new Observer<List<Alarm>>() {
     @Override
     public void onChanged(@Nullable List<Alarm> alarms) {}
});
Run Code Online (Sandbox Code Playgroud)