很难解释这里的一切,但我正在制作一个新闻应用程序,你有一个主屏幕与文章加载从一个API,你有一个最喜欢的屏幕与您最喜欢的文章。您可以单击一篇文章并将其放入收藏夹,当您导航到收藏夹页面时,您可以选择一篇文章并将其删除。
我创建了一个模型:
data class Article(
@SerializedName("Id")
val id: Int,
@SerializedName("Title")
val title: String,
@SerializedName("PublishDate")
val publishDate: String,
@SerializedName("Summary")
val summary: String,
@SerializedName("Image")
val image: String,
@SerializedName("Url")
val url: String,
@SerializedName("IsFavorite")
var isFavorite: Boolean,
@SerializedName("Feed")
val feed: Int,
@SerializedName("Categories")
val categories: List<Category>,
@SerializedName("Related")
val related: List<String>
)
我正在使用“isFavorite”来检查文章是否是最喜欢的。API请求工作正常,但在我的MainViewModel中,由于某种原因它出错了:
fun favoriteArticle(context: Context) {
viewModelScope.launch {
val getSharedPref = context.getSharedPreferences("AUTHENTICATION", Context.MODE_PRIVATE)
val authToken = getSharedPref.getString("AuthToken", "")
if (!authToken.isNullOrEmpty()) {
if (selectedArticle.isFavorite) {
articleRepo.deleteLikedArticle(authToken, selectedArticle.id)
showMessage(context, R.string.article_removed_favorites)
} else {
articleRepo.addLikedArticle(authToken, selectedArticle.id)
showMessage(context, R.string.article_added_favorites)
}
}
refreshListOfArticles(context)
refreshListOfLikedArticles(context)
}
}
我的一个朋友做了几乎相同的步骤,对他来说这是有效的,但对我来说不是。isFavorite在应该更改时保持为false。例如,输入“selectedArticle.isFavorite == true”有点效果,但是它会添加文章两次,然后删除它。
请帮我解决这个问题!
所以我尝试了上面的例子,尝试了一些chatgpt的东西,但不能找出为什么它不能正确更新
编辑:也许这也是很好的添加清除
var listOfArticlesResponse: List<Article> by mutableStateOf(listOf())
var listOfLikedArticlesResponse: List<Article> by mutableStateOf(listOf())
var selectedArticle: Article by mutableStateOf(
Article(
id = 0,
title = "",
publishDate = "",
summary = "",
image = "",
url = "",
isFavorite = false,
feed = 0,
categories = listOf(),
related = listOf()
)
)
1条答案
按热度按时间eni9jsuy1#
我想
是异步调用吗?也就是说,你在后台线程/协程上做它?
如果你有代码:
刷新可以在添加喜欢完成之前发生。
你可以在同一个协程上执行这两个操作(以保证顺序或执行),或者在第一次添加完成后进行回调,然后再做你想做的事情。
希望这是有意义的,你还没有分享你所有的代码,所以它'有点猜测:-)