Apollo Android (GraphQL) 自定义类型构建文件警告:“无法为最终字段赋值”

Posted

技术标签:

【中文标题】Apollo Android (GraphQL) 自定义类型构建文件警告:“无法为最终字段赋值”【英文标题】:Apollo Android (GraphQL) custom type build file warning: "Cannot assign value to final field" 【发布时间】:2019-04-21 16:43:04 【问题描述】:

应用级构建文件中的以下闭包显示了与 customTypeMapping 对象相关的警告“无法将值分配给最终字段”:

apollo 
    customTypeMapping = [
        "DateTime" : "java.lang.String",
        "UUID" : "java.lang.String",
        "JSONString" : "java.lang.String"
    ]

这似乎是依赖项或工具的最近更改。我尝试过其他语句格式,例如:

    customTypeMapping["DateTime"]="java.lang.String"

但没有成功(显示构建错误:没有这样的属性:类的日期时间:org.gradle.api.internal.provider.DefaultPropertyState)

此问题开头的代码按预期运行,但如何清除警告?

Apollo 依赖:

classpath "com.apollographql.apollo:apollo-gradle-plugin:1.0.0-alpha2"

【问题讨论】:

【参考方案1】:

一切都正确,但您还需要通过注册您的自定义适配器来完成它。

一些额外的细节可能是您的引用(apollo)必须在 gradle 文件的末尾(在声明所有其他依赖项之后)

在我的情况下,我有一个 UUID 类型的特殊情况,我所做的是:

在我的应用 build.gradle 结束时

apollo 
    customTypeMapping = [
            "UUID" : "java.lang.String"
    ]

我正在使用 Apollo 的课程内部:

创建了我的自定义适配器

   CustomTypeAdapter<String> customTypeAdapter = new CustomTypeAdapter<String>() 
        @Override
        public String decode(@NotNull CustomTypeValue value) 
            return value.toString();
        

        @NotNull
        @Override
        public CustomTypeValue encode(@NotNull String value) 
            return new CustomTypeValue.GraphQLString(value);
        
    ;

然后在初始化 Apollo 的时候

        apolloClient = ApolloClient.builder().addCustomTypeAdapter(CustomType.UUID, customTypeAdapter)
            .serverUrl(BASE_URL)
            .okHttpClient(okHttpClient)
            .build();

如果您有更多问题,请参阅框架,它可能有点复杂,但我认为通过这个示例您可以解决它。

https://github.com/apollographql/apollo-android#custom-scalar-types

【讨论】:

以上是关于Apollo Android (GraphQL) 自定义类型构建文件警告:“无法为最终字段赋值”的主要内容,如果未能解决你的问题,请参考以下文章

身份验证 Apollo Graphql for android

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

如何在 GraphQL apollo-android 客户端中获取 HTTP 状态码

Apollo Android (GraphQL) 自定义类型构建文件警告:“无法为最终字段赋值”

Apollo GraphQL Android 无法解决“无法解析 http 响应”错误

如何在 Kotlin Android 中读取 Apollo Client 响应/GraphQL 响应的响应数据