标签: kotlin

尝试在空对象引用上调用接口方法“java.lang.Object kotlin.Lazy.getValue()”

抱歉我的愚蠢问题。

我有谷歌这个问题,但答案对我不起作用。

这是我的代码。

  data class Article(val id: Long, val title: String, val ingress: String, val image: String,
                       val dateTime: String, val tags: List<String>, val content: List<Item>, val created: Long, val changed: Long) {

        @delegate:Transient
        val formatDateString: String by lazy {
            val sdf = SimpleDateFormat("dd.MM.yyyy HH.mm")
            val date: Date = sdf.parse(dateTime)
            var time: String?
            if (date.year == Date().year) {
                time = SimpleDateFormat("dd MM,HH:mm", Locale.US).format(date)
            } else {
                time = SimpleDateFormat("dd MM yyyy,HH:mm", Locale.US).format(date)
            }
            time!!
        }

    }
Run Code Online (Sandbox Code Playgroud)

当我尝试获取formatDateString价值时,会发生上述异常。

代码访问 …

android kotlin

15
推荐指数
1
解决办法
1898
查看次数

从另一个图表导航到一个片段而不是它的开始目的地

在我的第一张图中,我有以下内容:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/firstGraph"
    app:startDestination="@id/listFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name="com.example.ListFragment">

        <action
            android:id="@+id/action_list_to_details"
            app:destination="@id/detailsFragment" />

    </fragment>

    <fragment
        android:id="@+id/detailsFragment"
        android:name="com.example.DetailsFragment">

    </fragment>
</navigation>
Run Code Online (Sandbox Code Playgroud)

在我的第二张图中,我有以下内容:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/secondGraph"
    app:startDestination="@id/dashboardFragment">

    <include app:graph="@navigation/firstGraph" />

    <fragment
        android:id="@+id/dashboardFragment"
        android:name="com.example.DashboardFragment">
        <action
            android:id="@+id/action_dashboard_to_notification"
            app:destination="@id/notificationFragment"/>
    </fragment>

    <fragment
        android:id="@+id/notificationFragment"
        android:name="com.example.NotificationsFragment">

        <action
            android:id="@+id/action_notification_to_details"
            app:destination="@id/firstGraph"/>

    </fragment>
</navigation>
Run Code Online (Sandbox Code Playgroud)

我想直接从“notificationFragment”导航到“detailsFragment”而不是起始目的地,包括第二个图形堆栈

navigation android kotlin android-jetpack

15
推荐指数
1
解决办法
3469
查看次数

接收流的Android单元测试视图模型

我有一个 ViewModel 与用例对话并返回一个流,即Flow<MyResult>. 我想对我的 ViewModel 进行单元测试。我是使用流程的新手。需要帮助请。这是下面的视图模型 -

class MyViewModel(private val handle: SavedStateHandle, private val useCase: MyUseCase) : ViewModel() {

        private val viewState = MyViewState()

        fun onOptionsSelected() =
            useCase.getListOfChocolates(MyAction.GetChocolateList).map {
                when (it) {
                    is MyResult.Loading -> viewState.copy(loading = true)
                    is MyResult.ChocolateList -> viewState.copy(loading = false, data = it.choclateList)
                    is MyResult.Error -> viewState.copy(loading = false, error = "Error")
                }
            }.asLiveData(Dispatchers.Default + viewModelScope.coroutineContext)
Run Code Online (Sandbox Code Playgroud)

MyViewState 看起来像这样 -

 data class MyViewState(
        val loading: Boolean = false,
        val data: List<ChocolateModel> = emptyList(),
        val error: …
Run Code Online (Sandbox Code Playgroud)

android junit4 kotlin android-mvvm kotlin-coroutines

15
推荐指数
1
解决办法
7702
查看次数

JobCancellationException StandaloneCoroutine 被取消

由于我们正在使用协程(使用 1.3.5),我们有很多崩溃:JobCancellationException - StandaloneCoroutine was cancelled

我阅读了很多关于这些问题的线程,我在生产中尝试了很多解决方案,但总是发生崩溃。

在我们所有的视图模型中,我们都使用了视图模型范围,所以没关系。

但是在我们的数据层中,我们需要启动一个跟踪事件,即触发即忘任务。在第一步中,我们使用了一个GlobalScope.launch. 我认为 CancelletationException 是由于这个全局范围,所以我删除了它并使用 aSupervisorJob和 a在数据层中创建了一个扩展CoroutineExceptionHandler

private val appScope = CoroutineScope(Dispatchers.Default + SupervisorJob())
private val coroutineExceptionHandler by lazy { CoroutineExceptionHandler { _, throwable -> logw("Error occurred inside Coroutine.", throwable) } }

fun launchOnApp(block: suspend CoroutineScope.() -> Unit) {
    appScope.launch(coroutineExceptionHandler) { block() }
}
Run Code Online (Sandbox Code Playgroud)

但我总是看到这段代码崩溃。我需要使用cancelAndJoin方法吗?我可以将哪种策略与干净的建筑和这种工作一起使用?

提前致谢

exception coroutine kotlin kotlin-coroutines

15
推荐指数
1
解决办法
2225
查看次数

如何使用 Hilt 模拟视图模型以进行单元测试片段?

我有一个使用 Hilt 进行依赖注入的 android 应用程序设置,并且想对我的片段进行单元测试。

我目前正在使用以下方法创建我的视图模型:

private val viewModel: ExampleViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)

我正在使用此处的代码创建用于测试的片段

我需要用模拟替换这个 ExampleViewModel,我该怎么做?

android kotlin android-viewmodel dagger-hilt

15
推荐指数
1
解决办法
2844
查看次数

Kotlin 1.4 中 sumOf() 和 sumBy() 有什么区别?

sumOf()Kotlin 1.4 中的新函数与sumBy()sumByDouble()函数有何不同?

collections kotlin

15
推荐指数
2
解决办法
1822
查看次数

如何使用双向数据绑定更新 RecyclerView 中所有 EditTexts 元素的文本

我有一个RecyclerView持有一些CardViews并且每个CardView包含的EditText乘以用户给出倍特定速率(速率来自一个端点,价格为每行不同)。对于CardViews,我使用数据绑定。

应用用例:

该应用程序应显示其他货币的金额,例如 2、7.89、14.34 或 110 欧元。

  1. 用户在任何行中输入一个金额(在EditText 中),每行都有一个具有不同值的“ rate ”(速率来自 API 端点)字段
  2. 用户输入的金额乘以“ rate
  3. RecyclerView 中的每一行都应该更新

现在的问题是如何使用双向数据绑定更新RecyclerView中所有 EditTexts 元素的文本

这是我用于数据绑定的数据类:

data class CurrencyItem(
    var flag: String,
    var shortName: String,
    var fullName: String,
    var rate: Double
) : BaseObservable() {

    @Bindable
    var rateTimesAmount: String = (CurrencyApplication.userEnteredAmount * rate).toString()
        set(amount) {
            val amountAsDouble = amount.toDouble() …
Run Code Online (Sandbox Code Playgroud)

android android-edittext kotlin android-recyclerview two-way-binding

15
推荐指数
1
解决办法
629
查看次数

断点不属于任何类

在某些情况下,android studio 会停止调试过程。

我已经重新启动ide,模拟器,但问题仍然出现

在此处输入图片说明

debugging breakpoints kotlin android-studio

15
推荐指数
3
解决办法
2471
查看次数

Jetpack Compose LazyColumn 以编程方式滚动到 Item

有没有办法以编程方式滚动LazyColumn到列表中的某个项目?我认为可以通过提升LazyColumn参数来完成,state: LazyListState = rememberLazyListState()但我不知道如何更改此状态,例如单击按钮。

android kotlin android-jetpack-compose android-jetpack-compose-list

15
推荐指数
1
解决办法
4977
查看次数

Dart 的“声音零安全”与 Kotlin 零安全有何不同?

这段 Dart 官方视频指出,Dart 所谓的“声音空安全”比 Kotlin 的空安全设计要好,因为它可以根据变量是否被声明为可空来优化代码,其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。

那么,Dart 做了哪些额外的优化?

它如何与不支持空安全的遗留代码库互操作,同时确保空安全?

language-design dart kotlin kotlin-null-safety dart-null-safety

15
推荐指数
2
解决办法
1348
查看次数