似乎有两种方法可以定义一个密封类,其中一个是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) 我正在使用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) 通常,我使用代码 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) 我希望优化代码 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) 我正在学习依赖注入,以下代码A和代码B来自项目https://github.com/android/sunflower
\n作者PlantDao在代码A中定义了依赖注入,但在代码B中手动PlantDao创建了一个对象。database.plantDao()
为什么作者不对PlantDao代码 B 中的对象使用依赖注入?如何对PlantDao代码 B 中的对象使用依赖注入?
代码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}\nRun Code Online (Sandbox Code Playgroud)\n代码B
\nclass 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) 我希望从密封类中获取数据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) 下面的代码可以在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) 我认为下面的代码会导致错误,但它在android中运行良好,为什么?
int[] myID=new int[0];
当手机响铃时,正在播放铃声,我想通过铃声说出来电者的姓名,我该怎么办?有一些示例代码吗?谢谢!
此外,我可以通过编程方式拒绝电话号码吗?有一些示例代码吗?
我希望生成一个基于文件名的日期,我认为字符串名称将返回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)