Activity 无法转换为 LifecycleOwner
Activity cannot be converted to LifecycleOwner
我想将 Room 与 LiveData 一起使用,我已经在其他项目中使用过它,但在这个项目中,我无法让它工作。当我尝试观察实时数据时,它无法将我的 activity 转换为生命周期 activity,但是,我正在使用 AppCompatActivity,我什至尝试覆盖 getLifecycle 方法(这对我有用以前的项目)。我什至尝试使用 AndroidX,但仍然是同样的问题:(
这是我的activity(部分):
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;
}
这是我的 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'
这是我的道:
@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);
}
我尝试了这里的所有建议,包括我的建议,但我无法弄清楚这种情况下的问题所在。
编辑:
已添加代码
您不需要使用
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
因为,新的 AppcompatActivity
已经是 lifecyclerOwner
。
您还观察到 class 对象,这是不正确的。 actMain.class
是一个 class 对象。
你应该有:
alarmViewModel.getAlarmList().observe(this, new Observer<List<Alarm>>() {
@Override
public void onChanged(@Nullable List<Alarm> alarms) {}
});
升级到最新版本。
以下是我项目的参考
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
您也可以参考 https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample
中的 Basic 示例
我想将 Room 与 LiveData 一起使用,我已经在其他项目中使用过它,但在这个项目中,我无法让它工作。当我尝试观察实时数据时,它无法将我的 activity 转换为生命周期 activity,但是,我正在使用 AppCompatActivity,我什至尝试覆盖 getLifecycle 方法(这对我有用以前的项目)。我什至尝试使用 AndroidX,但仍然是同样的问题:(
这是我的activity(部分):
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;
}
这是我的 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'
这是我的道:
@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);
}
我尝试了这里的所有建议,包括我的建议,但我无法弄清楚这种情况下的问题所在。
编辑: 已添加代码
您不需要使用
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
因为,新的 AppcompatActivity
已经是 lifecyclerOwner
。
您还观察到 class 对象,这是不正确的。 actMain.class
是一个 class 对象。
你应该有:
alarmViewModel.getAlarmList().observe(this, new Observer<List<Alarm>>() {
@Override
public void onChanged(@Nullable List<Alarm> alarms) {}
});
升级到最新版本。 以下是我项目的参考 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
您也可以参考 https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample
中的 Basic 示例