使用 apolloclient 在 android 中 Graphql 查询导致“标量的意外枚举”

Posted

技术标签:

【中文标题】使用 apolloclient 在 android 中 Graphql 查询导致“标量的意外枚举”【英文标题】:Graphql query results in "Unexpected enum for a scalar" in android using apolloclient 【发布时间】:2020-05-27 21:30:17 【问题描述】:

我正在尝试使用带有 ApolloClient 的 Graphql 从 API 获取一些数据。但这会导致 “标量的意外枚举”。请帮我解决错误。下面是我的代码。

ItemsQuery.graphql

query fetchCategoryItems($input : String!) 
__typename
items(where: categoryUuid: _eq: input) 
    categoryUuid
    description
    image
    name
    ..... // some more items

活动代码。

val client = ApolloClientInstance.getInstance()
val categoryId = "random_id"
client.query(FetchCategoryItemsQuery.builder().input(categoryId.toString()).build())
        .responseFetcher(ApolloResponseFetchers.NETWORK_FIRST)
        .enqueue(object : ApolloCall.Callback<FetchCategoryItemsQuery.Data>() 
            override fun onFailure(exception: ApolloException) 
                Logger.debug(TAG, "$exception.message")
            

            override fun onResponse(response: Response<FetchCategoryItemsQuery.Data>) 
                    Logger.debug(TAG, "$response.data()?.items()?.size")
                    Logger.debug(TAG, "error: $response.errors()[0].message()")
                
            
        )

【问题讨论】:

【参考方案1】:

您缺少$ - 您的变量定义为$input,但您将其用作input。如果没有 $,解析器会假定 input 是枚举值而不是变量。

【讨论】:

我尝试将$ 前缀为$input。它给出的错误为 error: String 类型的变量输入!用于需要 uuid 的位置 这与您的原始语法错误无关。只需按照错误中的指示更改变量的类型即可。 谢谢你:)。它现在正在工作。 Lint 将其显示为未知字段,所以我认为它是一个错误;)

以上是关于使用 apolloclient 在 android 中 Graphql 查询导致“标量的意外枚举”的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中使用 ApolloClient 订阅 AppSync

在 Gatsby 中使用 ApolloClient 与 localhost / 本地 IP uri

如何在 ApolloClient.query() 上使用“缓存和网络”策略

ApolloClient:optimisticResponse 在更新期间变为“未定义”

如何在 Android Studio 中从 Apollo Client (GraphQL) 导入生成的类

apolloClient.query 不使用中间件,而 <Query /> 使用