小编Hel*_*oCW的帖子

关于Kotlin密封课的哪一个是正确的?

似乎有两种方法可以定义一个密封类,其中一个是Code A和CodeB之间的对应关系?

代码A.

sealed class ExprA
data class Const(val number: Double) : ExprA()
data class Sum(val e1: ExprA, val e2: ExprA) : ExprA()
Run Code Online (Sandbox Code Playgroud)

代码B.

sealed class ExprB{
    data class Const(val number: Double) : ExprB()
    data class Sum(val e1: ExprB, val e2: ExprB) : ExprB()
}
Run Code Online (Sandbox Code Playgroud)

android kotlin

0
推荐指数
1
解决办法
248
查看次数

为什么 lambda 表达式需要在 Android Kotlin 中显式返回?

我正在使用https://github.com/googlecodelabs/android-room-with-a-view/tree/kotlin的示例代码 RoomWordsSample 学习 Room 。

代码 A 来自WordRoomDatabase.kt

1:我不明白为什么作者需要添加代码INSTANCE = instance,所以我删除了它,代码B运行良好,你能告诉我为什么吗?

2:在我看来,lambda 表达式中的最新表达式会返回结果,val instance = Room.databaseBuilder( ...代码 C 中的最新表达式,但代码 C 无法通过编译,为什么?

代码 A

@Database(entities = [Word::class], version = 1, exportSchema = false)
abstract class WordRoomDatabase : RoomDatabase() {

    abstract fun wordDao(): WordDao

    companion object {
        @Volatile
        private var INSTANCE: WordRoomDatabase? = null

        fun getDatabase(
                context: Context,
                scope: CoroutineScope
        ): WordRoomDatabase {           
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                        context.applicationContext,
                        WordRoomDatabase::class.java,
                        "word_database" …
Run Code Online (Sandbox Code Playgroud)

android kotlin

0
推荐指数
1
解决办法
49
查看次数

在 Kotlin 中使用“androidx.preference:preference-ktx:1.1.1”时如何读写 SharedPreferences?

通常,我使用代码 A 或代码 B 来读取或写入 SharedPreferences。

目前,我更新了我的项目以"androidx.preference:preference-ktx:1.1.1"与 Kotlin 一起使用。

当我与 Kotlin 一起使用时,是否有更好的方法来读取和写入 SharedPreferences "androidx.preference:preference-ktx:1.1.1"

代码A

SharedPreferences prfs = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
String Astatus = prfs.getString("Authentication_Status", "");
Run Code Online (Sandbox Code Playgroud)

代码B

SharedPreferences preferences = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Authentication_Id",userid.getText().toString());
editor.putString("Authentication_Password",password.getText().toString());
editor.putString("Authentication_Status","true");
editor.apply();
Run Code Online (Sandbox Code Playgroud)

android kotlin androidx

0
推荐指数
1
解决办法
2843
查看次数

有没有一种简单的方法可以在 Kotlin 中优化代码?

我希望优化代码 A,但代码 B 失败了。

有没有一种简单的方法可以优化 Kotlin 中的代码 A?

代码 A

mediaPlayer?.let {
   if (it.isPlaying){
      it.stop()
   }
}
Run Code Online (Sandbox Code Playgroud)

代码 B

 mediaPlayer?.isPlaying?.stop() 
Run Code Online (Sandbox Code Playgroud)

kotlin

0
推荐指数
1
解决办法
46
查看次数

如何在 CoroutineWorker 中使用 hilt 进行依赖注入?

我正在学习依赖注入,以下代码A和代码B来自项目https://github.com/android/sunflower

\n

作者PlantDao在代码A中定义了依赖注入,但在代码B中手动PlantDao创建了一个对象。database.plantDao()

\n

为什么作者不对PlantDao代码 B 中的对象使用依赖注入?如何对PlantDao代码 B 中的对象使用依赖注入?

\n

代码A

\n
@InstallIn(SingletonComponent::class)\n@Module\nclass DatabaseModule {\n\n    @Singleton\n    @Provides\n    fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {\n        return AppDatabase.getInstance(context)\n    }\n\n    @Provides\n    fun providePlantDao(appDatabase: AppDatabase): PlantDao {\n        return appDatabase.plantDao()\n    }\n\n   ...\n}\n
Run Code Online (Sandbox Code Playgroud)\n

代码B

\n
class SeedDatabaseWorker(\n        context: Context,\n        workerParams: WorkerParameters\n) : CoroutineWorker(context, workerParams) {\n    override suspend fun doWork(): Result = withContext(Dispatchers.IO) {\n        try {\n            val filename = inputData.getString(KEY_FILENAME)\n            if (filename != null) {\n                applicationContext.assets.open(filename).use { …
Run Code Online (Sandbox Code Playgroud)

dependency-injection kotlin dagger-hilt

0
推荐指数
1
解决办法
1700
查看次数

为什么我不能直接从 Kotlin 中的密封类获取数据?

我希望从密封类中获取数据Result<out R>,但val mydata = queryList.data导致以下错误,我该如何修复它?

错误信息 智能转换为“Result.Success<Flow<List>>”是不可能的,因为“queryList”是具有开放或自定义 getter 的属性

@Composable
fun Greeting(
    name: String   
) {
     Column( ) {
        val queryList by produceState(initialValue = aa() ) {
            value = mViewMode.listRecord()
        }

        when (queryList) {
            is Result.Error -> {}
            is Result.Loading -> {}
            is Result.Success -> {
                val mydata = queryList.data //It cause error
            }
        }
    }
}


sealed class Result<out R> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : …
Run Code Online (Sandbox Code Playgroud)

kotlin

0
推荐指数
1
解决办法
1007
查看次数

为什么 Kotlin 中一个 not null 变量可以加上一个 null 值?

下面的代码可以在Android Studio中编译。

我很奇怪为什么非空变量可以加上空值。

1:你知道val smaybe null和 var userDatais not null,为什么是 userData = userData + s正确的?

2:结果是什么 userData = userData + null?App运行时会崩溃吗?

 var userData: String by remember { mutableStateOf("OK") }
 userData = userData + null

 val s = it.message?.content     
 userData = userData + s
Run Code Online (Sandbox Code Playgroud)

kotlin

0
推荐指数
1
解决办法
116
查看次数

当我将dim的长度设置为零时,为什么不会导致错误

我认为下面的代码会导致错误,但它在android中运行良好,为什么?

int[] myID=new int[0];

java android

-1
推荐指数
1
解决办法
58
查看次数

当手机响铃时,我该如何说出来电者的姓名?

当手机响铃时,正在播放铃声,我想通过铃声说出来电者的姓名,我该怎么办?有一些示例代码吗?谢谢!

此外,我可以通过编程方式拒绝电话号码吗?有一些示例代码吗?

android

-1
推荐指数
1
解决办法
2654
查看次数

当我将这些int var链接为字符串时,为什么会添加int var?

我希望生成一个基于文件名的日期,我认为字符串名称将返回20151027_161053.mp4.

实际上它返回2051_161053.mp4,似乎年,月,日都加了2051 = 2015 + 10 + 27-1,但似乎没有添加161053.

我的代码有什么问题?谢谢!

    Calendar c = Calendar.getInstance();

    int year=c.get(Calendar.YEAR);
    int month=c.get(Calendar.MONTH);
    int day=c.get(Calendar.DAY_OF_MONTH);
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);
    int sencond=c.get(Calendar.SECOND);

    String name;
    name=year+month+day+"_"+hour+minute+sencond+".mp4";
Run Code Online (Sandbox Code Playgroud)

java android

-1
推荐指数
1
解决办法
50
查看次数