You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:27:03