JetPack Compose加载分类页面触发IllegalArgumentException错误求助
解决Compose中Landscapist Coil的IllegalArgumentException异常
触发的异常:
FATAL EXCEPTION: main Process: com.example.newsapp, PID: 4645 Java.lang.IllegalArgumentException: Wrong source was used: 2130968578, The source should be one of ImageBitmap, ImageVector, or Painter.
问题原因:
异常出现在ArticleContent中的CoilImage组件——error参数传入的是资源ID(R.drawable.breaking_news),但该参数要求的是Painter类型,与placeHolder的正确传参方式不一致,导致类型不匹配。
修改方案:
将CoilImage的error参数也改为用painterResource包装资源ID,修改后的代码片段如下:
@Composable fun ArticleContent(articles: List<TopNewsArticle>, modifier: Modifier = Modifier) { LazyColumn { items(articles) { article -> Card(modifier.padding(8.dp), border = BorderStroke(2.dp, color = colorResource(id = R.color.purple_500))) { Row( modifier .fillMaxWidth() .padding(8.dp)) { CoilImage( imageModel = article.urlToImage, modifier = Modifier.size(100.dp), placeHolder = painterResource(id = R.drawable.breaking_news), error = painterResource(id = R.drawable.breaking_news) // 此处修改为painterResource包装 ) // 其余代码保持不变 Column(modifier.padding(8.dp)) { Text( text = article.title ?: "Not Available", fontWeight = FontWeight.Bold, maxLines = 3, overflow = TextOverflow.Ellipsis ) Row( modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, ) { Text(text = article.author ?: "Not Available") Text(text = MockData.stringToDate(article.publishedAt ?: "2021-11-10T14:25:20Z").getTimeAgo()) } } } } } } }
补充说明:
在你使用的Landscapist Coil 1.4.1版本中,CoilImage的placeHolder和error参数都要求传入Painter实例,不能直接传递资源ID。之前仅placeHolder做了正确转换,error直接传ID导致了类型不兼容的异常。
内容的提问来源于stack exchange,提问作者asd
相关产品推荐
相关产品推荐

