抱歉我的愚蠢问题。
我有谷歌这个问题,但答案对我不起作用。
这是我的代码。
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
价值时,会发生上述异常。
代码访问 …
在我的第一张图中,我有以下内容:
<?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”而不是起始目的地,包括第二个图形堆栈
我有一个 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) 由于我们正在使用协程(使用 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
方法吗?我可以将哪种策略与干净的建筑和这种工作一起使用?
提前致谢
我有一个使用 Hilt 进行依赖注入的 android 应用程序设置,并且想对我的片段进行单元测试。
我目前正在使用以下方法创建我的视图模型:
private val viewModel: ExampleViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)
我正在使用此处的代码创建用于测试的片段
我需要用模拟替换这个 ExampleViewModel,我该怎么做?
sumOf()
Kotlin 1.4 中的新函数与sumBy()
或sumByDouble()
函数有何不同?
我有一个RecyclerView持有一些CardViews并且每个CardView包含的EditText其乘以用户给出量倍特定速率(速率来自一个端点,价格为每行不同)。对于CardViews,我使用数据绑定。
应用用例:
该应用程序应显示其他货币的金额,例如 2、7.89、14.34 或 110 欧元。
现在的问题是如何使用双向数据绑定更新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
有没有办法以编程方式滚动LazyColumn
到列表中的某个项目?我认为可以通过提升LazyColumn
参数来完成,state: LazyListState = rememberLazyListState()
但我不知道如何更改此状态,例如单击按钮。
android kotlin android-jetpack-compose android-jetpack-compose-list
这段 Dart 官方视频指出,Dart 所谓的“声音空安全”比 Kotlin 的空安全设计要好,因为它可以根据变量是否被声明为可空来优化代码,其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。
那么,Dart 做了哪些额外的优化?
它如何与不支持空安全的遗留代码库互操作,同时确保空安全?
language-design dart kotlin kotlin-null-safety dart-null-safety
kotlin ×10
android ×6
android-jetpack-compose-list ×1
android-mvvm ×1
breakpoints ×1
collections ×1
coroutine ×1
dagger-hilt ×1
dart ×1
debugging ×1
exception ×1
junit4 ×1
navigation ×1