Kotlin集成GraphQL查询的构建配置与Volley调用问题求助
GraphQL Kotlin客户端调用问题解决方案
1 构建配置报错原因及修复
你遇到的报错核心原因是:你复制的配置代码是Kotlin DSL 格式(对应build.gradle.kts文件),但你项目里的是Groovy格式的build.gradle文件,两种语法不兼容,所以直接粘贴会识别失败。
1.1 build.gradle与build.gradle.kts的区别
- build.gradle:使用Groovy语法编写Gradle配置,是旧版本Gradle的默认配置格式,语法灵活但无类型校验,IDE补全支持弱
- build.gradle.kts:使用Kotlin语法编写Gradle配置,是新版本Gradle推荐的格式,有类型安全校验、完整的IDE代码提示,语法规则和普通Kotlin代码一致
不需要强行转换格式,Groovy格式也可以正常配置GraphQL-Kotlin插件。
1.2 Groovy格式的正确配置
首先注意:你当前是Android项目,graphql-kotlin-spring-client是Spring服务端项目的客户端依赖,不能在Android环境运行,如果你要使用官方客户端请改用graphql-kotlin-http-client。
正确的Groovy配置如下:
plugins { id 'com.expediagroup.graphql' version '7.0.1' // 可替换为最新版本号 } dependencies { // Android项目用http客户端,不要用spring客户端 implementation "com.expediagroup:graphql-kotlin-http-client:7.0.1" } graphql { client { endpoint = "http://localhost:8080/graphql" packageName = "com.example.generated" } }
配置完成后同步Gradle即可解决报错。
2 Volley调用GraphQL的实现方案
完全可以用Volley调用GraphQL接口,本质上GraphQL就是固定格式的POST请求,不需要依赖额外的专用客户端。
2.1 请求结构说明
GraphQL POST请求规则:
- 请求头
Content-Type固定为application/json - 请求体是JSON格式,包含三个字段:
query:字符串类型,填写你的GraphQL查询/变更语句variables:JSON对象类型,可选,填写查询用到的变量operationName:字符串类型,可选,填写操作名称
2.2 可运行示例代码
import android.content.Context import com.android.volley.Request import com.android.volley.toolbox.JsonObjectRequest import com.android.volley.toolbox.Volley import org.json.JSONObject fun queryUserInfo(context: Context, userId: String) { // 1. 构造GraphQL查询语句 val query = """ query GetUserInfo(${'$'}userId: ID!) { user(id: ${'$'}userId) { id name email } } """.trimIndent() // 2. 构造请求体 val requestBody = JSONObject().apply { put("query", query) put("variables", JSONObject().apply { put("userId", userId) }) } // 3. 构造Volley请求 val request = JsonObjectRequest( Request.Method.POST, "http://你的GraphQL服务地址/graphql", requestBody, { response -> // 请求成功处理,解析返回的data字段 val userData = response.getJSONObject("data").getJSONObject("user") val userName = userData.getString("name") // 后续业务逻辑 }, { error -> // 请求失败处理 error.printStackTrace() } ) // 4. 添加到请求队列执行 Volley.newRequestQueue(context).add(request) }
注意:Kotlin raw字符串中$符号需要用${'$'}转义,避免被识别为Kotlin字符串插值。
内容的提问来源于stack exchange,提问作者Clod90
相关产品推荐
相关产品推荐

