android: kotlin 流多个事件
android: kotlin flow multiple events
我在我的应用程序中使用了流,但是我遇到了一些问题,它用不同的方式击中逻辑两次或没有它击中逻辑 8/9 次。我正在使用 livedata 作为数据绑定流。
xml
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/amount_edit"
isFocused="@={viewModel.amountFocused}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberSigned"
android:maxLines="1"
android:text="@={viewModel.amount}" />
代码
private val amountFlow = amount.asFlow().mapLatest {
Timber.d("FLOW : amountFlow ${it}")
if (it != null && it.length >= MIN_QUERY_LENGTH) {
it.toIntOrNull()
} else {
null
}
}.distinctUntilChanged()
此调试语句使用 distinctUntilChanged() 被调用两次,或者在没有它的情况下被调用 8-9 次。我不太确定为什么,但是这个流程正在与另一个流程结合,并且它调用了我的其他逻辑方式。
几天前我自己解决了这个问题。事实证明,在我的代码中更深入的实时数据中,我针对不同的事情多次将组合流转换为实时数据导致了问题。通过使所有流程重新运行。
我在我的应用程序中使用了流,但是我遇到了一些问题,它用不同的方式击中逻辑两次或没有它击中逻辑 8/9 次。我正在使用 livedata 作为数据绑定流。
xml
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/amount_edit"
isFocused="@={viewModel.amountFocused}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberSigned"
android:maxLines="1"
android:text="@={viewModel.amount}" />
代码
private val amountFlow = amount.asFlow().mapLatest {
Timber.d("FLOW : amountFlow ${it}")
if (it != null && it.length >= MIN_QUERY_LENGTH) {
it.toIntOrNull()
} else {
null
}
}.distinctUntilChanged()
此调试语句使用 distinctUntilChanged() 被调用两次,或者在没有它的情况下被调用 8-9 次。我不太确定为什么,但是这个流程正在与另一个流程结合,并且它调用了我的其他逻辑方式。
几天前我自己解决了这个问题。事实证明,在我的代码中更深入的实时数据中,我针对不同的事情多次将组合流转换为实时数据导致了问题。通过使所有流程重新运行。