Apollo Android(GraphQL)自定义类型生成文件警告:“无法为最终字段分配值”

时间:2018-11-19 10:31:30

标签: android apollo

应用程序级构建文件中的以下关闭显示与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的DateTime)

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

阿波罗依赖项:

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

1 个答案:

答案 0 :(得分:0)

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

一些额外的细节可能是您的引用(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);
        }
    };

然后在初始化阿波罗时

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

如果您有更多问题,请参考该框架,它可能有点复杂,但是我认为通过此示例,您可以了解它。

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