kotlin Android新闻应用程序无法通过API更新isFavorite布尔值

oknrviil  于 2023-10-23  发布在  Kotlin
关注(0)|答案(1)|浏览(95)

很难解释这里的一切,但我正在制作一个新闻应用程序,你有一个主屏幕与文章加载从一个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()
        )
    )
eni9jsuy

eni9jsuy1#

我想

articleRepo.addLikedArticle

是异步调用吗?也就是说,你在后台线程/协程上做它?
如果你有代码:

articleRepo.addLikedArticle(authToken, selectedArticle.id)
...
refreshListOfArticles(context)

刷新可以在添加喜欢完成之前发生。
你可以在同一个协程上执行这两个操作(以保证顺序或执行),或者在第一次添加完成后进行回调,然后再做你想做的事情。
希望这是有意义的,你还没有分享你所有的代码,所以它'有点猜测:-)

相关问题