我正在尝试将Android应用程序从Java转换为Kotlin.应用程序中有一些单身人士.我在没有构造函数参数的情况下为单例使用了伴随对象.还有另一个单例采用构造函数参数.
Java代码:
public class TasksLocalDataSource implements TasksDataSource {
private static TasksLocalDataSource INSTANCE;
private TasksDbHelper mDbHelper;
// Prevent direct instantiation.
private TasksLocalDataSource(@NonNull Context context) {
checkNotNull(context);
mDbHelper = new TasksDbHelper(context);
}
public static TasksLocalDataSource getInstance(@NonNull Context context) {
if (INSTANCE == null) {
INSTANCE = new TasksLocalDataSource(context);
}
return INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我在kotlin的解决方案:
class TasksLocalDataSource private constructor(context: Context) : TasksDataSource {
private val mDbHelper: TasksDbHelper
init {
checkNotNull(context)
mDbHelper = TasksDbHelper(context)
}
companion object {
lateinit var INSTANCE: TasksLocalDataSource
private val …Run Code Online (Sandbox Code Playgroud) EDIT: I NEED TO PASS A CONTEXT AS A PARAMETER TO THE CLASS
(DataStore是repository同一个班级,不要混淆)
我有两项活动,A和B一项repository。ActivityA打开 Activity B,ActivityB将数据保存在repository(DataStoreAndroid jetpack 的一部分)中。
我LiveData在这两个活动中都使用来观察DataStore.
更新DataStorefrom 活动中的新值后B,LiveData活动中的B会按预期获取新的更新值。但是,当我返回活动时,A会LiveData获取旧数据(期望新的更新数据)。
我意识到这种情况正在发生,因为我repository在这两个活动中创建了两个实例。
我怎样才能只创建该类的一个实例repository并在这两个活动中使用它?如果有更好的方法来做到这一点,那么该解决方案也受到欢迎。
singleton android repository kotlin android-jetpack-datastore