如何手动将 Apollo Android 生成的对象转换为 JSON 字符串并返回?

Gio*_*fas 11 android apollo graphql moshi

我使用Apollo Android 库对 GraphQL 端点进行查询。一切正常,直到我尝试将结果转换回 JSON 字符串(将它们存储在Room 数据库中)。我天真地尝试使用Moshi,但是由于以下错误而失败:

无法获得可用的额外产品:接口 com.example.MyQuery$MyFragmentInterface 没有 JsonAdapter

在哪里 MyFragmentInterfaceApollo 生成的用于处理查询片段的接口中。

所以,我试图找到 Apollo 库是否有/生成任何转换方法,即 sth like toJson()/fromJson(),用于生成的模型,但是我找不到任何可用的东西。

我错过了一些明显的东西吗?

Gio*_*fas 5

从 Apollo 1.3.x 开始,Java 中有一个Operation.Data.toJson()扩展函数 (Kotlin) 和相应的serialize静态方法。检查https://www.apollographql.com/docs/android/advanced/no-runtime/#converting-querydata-back-to-json

对于相反的 Json string to Query.Data,我使用类似以下内容:

fun String?.toMyData(): MyQuery.Data? {
    this ?: return null
    val query = MyQuery()
    val response: Response<MyQuery.Data> =
        OperationResponseParser(query,
                                query.responseFieldMapper(),
                                ScalarTypeAdapters.DEFAULT)
            .parse(Buffer().writeUtf8(this))
    return response.data
}
Run Code Online (Sandbox Code Playgroud)


ral*_*htp 0

尝试Postman看看错误是否也出现在那里https://blog.getpostman.com/2019/06/18/postman-v7-2-supports-graphql/

  • 也许是我没说清楚。当 apollo-graphql 解析 JSON 响应以生成模型时,不会出现该错误,反之亦然。两者都工作正常。当 *我* 获取模型并尝试将它们转换为 JSON,以便将它们作为字符串存储在我的应用程序的数据库(房间)中时,会出现错误。我使用了 moshi,但我怀疑 Gson 或 Jackson 会产生类似的错误。不管怎样,我终于根据这个https://github.com/apollographql/apollo-android/issues/1881#issuecomment-570817589成功地做到了这一点,当我有机会时,我会写下完整的答案。 (2认同)