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) 自定义类型构建文件警告:“无法为最终字段赋值”