vico: java.lang.NullPointerException: Attempt to invoke interface method 'float com.patrykandpatrick.vico.core.entry.ChartEntry.getX()' on a null object reference
Describe the bug Version: 1.9.2 (Unable to try newer versions due to #407)
Usage:
private val producer = ChartEntryModelProducer()
LaunchedEffect(key1 = Unit) {
while (true) {
producer.setEntries(viewModel.dataList)
delay(500)
}
}
VicoChart(producer = producer)
@Composable
fun VicoChart(producer: ChartEntryModelProducer) {
Chart(
chart = lineChart(),
chartModelProducer = producer,
startAxis = rememberStartAxis(),
bottomAxis = rememberBottomAxis(),
diffAnimationSpec = snap()
) {
3F
}
}
The dataList
is being updated by a flow collector:
f.collect { data ->
viewModel.dataList.add(FloatEntry(data.t.toFloat()/256F,data.t.toFloat()))
while (viewModel.dataList.size> BUFFER_SIZE) viewModel.dataList.removeFirst()
}
This issue is not occurring immediately, but after around 10-15s. BUFFER_SIZE=3840
The issue occurs after ~7k data points.
java.lang.NullPointerException: Attempt to invoke interface method 'float com.patrykandpatrick.vico.core.entry.ChartEntry.getX()' on a null object reference
at com.patrykandpatrick.vico.core.entry.diff.DefaultDiffProcessor.updateProgressMap(DefaultDiffProcessor.kt:101)
at com.patrykandpatrick.vico.core.entry.diff.DefaultDiffProcessor.setEntries(DefaultDiffProcessor.kt:47)
at com.patrykandpatrick.vico.core.entry.ChartEntryModelProducer.setEntries$lambda$1$lambda$0(ChartEntryModelProducer.kt:77)
at com.patrykandpatrick.vico.core.entry.ChartEntryModelProducer.$r8$lambda$DLLZQwVnv6C3LZjvqE_A2NZ0Tws(Unknown Source:0)
at com.patrykandpatrick.vico.core.entry.ChartEntryModelProducer$$ExternalSyntheticLambda1.run(Unknown Source:8)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at java.lang.Thread.run(Thread.java:1012)
Module
-
compose
-
views
-
compose-m2
-
compose-m3
-
core
(select if none of the above apply)
To reproduce Unsure, try rendering a timeseries data and trim it from the end to a fixed length. Render it every 500ms.
Expected behavior No error
Screenshots N/A
Android versions 13
Additional context N/A
About this issue
- Original URL
- State: closed
- Created 9 months ago
- Comments: 27 (13 by maintainers)
Sounds good. Vico 1.13.0 Alpha 5, which resolves the flickering issue, is now rolling out. I enclose a screen recording.
https://github.com/patrykandpatrick/vico/assets/120058021/d712bb25-c5cb-422c-9304-d60878e0b0c9
Since
ChartEntryModelProducer
is at fault here, you could use theChart
overload that accepts aChartEntryModel
. You can createChartEntryModel
s viaentryModelOf
:Vico 1.13.0 Alpha 3 comes out today. The ETA for version 1.13.0 Alpha 4 is tomorrow or the day after.