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

在Android Kotlin项目中集成ChatGPT API遇404错误求助

解决Android集成ChatGPT API时的404响应错误

我想要在Android的简单Activity中集成ChatGPT API,目前遇到无法获取响应的问题,Logcat中显示错误信息“Unexpected response code: 404”。我的Activity包含用于展示响应的TextView、输入问题的EditText以及触发接口调用的Button,以下是我编写的getResponse函数:

private fun getResponse(question: String, callback: (String) -> Unit) {
        val apiKey = "my api key"
        val url = "https://api.openai.com/v1/completions"

        val requestBody = """
            {
            "model": "text-davinci-003",
            "prompt": "$question",
            "max_tokens": 500,
            "temperature": 0
            }
        """.trimIndent()

        val request = Request.Builder()
            .url(url)
            .addHeader("Content-Type", "application/json")
            .addHeader("Authorization", "Bearer $apiKey")
            .post(requestBody.toRequestBody("application/json".toMediaTypeOrNull()))
            .build()

        client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                Log.e("error", "API request failed", e)
                callback("Failed to get a response")
            }

            override fun onResponse(call: Call, response: Response) {
                response.use {
                    if (!it.isSuccessful) {
                        Log.e("error", "Unexpected response code: ${it.code}")
                        callback("Failed to get a response")
                        return
                    }

                    val body = it.body?.string()
                    if (body == null) {
                        Log.e("error", "Response body is null")
                        callback("Failed to get a response")
                        return
                    }

                    Log.v("data", body)

                    try {
                        val jsonObject = JSONObject(body)
                        val jsonArray: JSONArray = jsonObject.getJSONArray("choices")
                        val textResult = jsonArray.getJSONObject(0).getString("text")
                        callback(textResult.trim())
                    } catch (e: Exception) {
                        Log.e("error", "Failed to parse JSON", e)
                        callback("Failed to parse response")
                    }
                }
            }
        })
    }

排查与解决方案

  • 确认模型与端点匹配:text-davinci-003属于已归档的旧模型,部分新API密钥可能无法访问该模型。建议替换为当前可用的gpt-3.5-turbo-instruct模型,端点仍为https://api.openai.com/v1/completions,确保模型名称拼写正确。
  • 验证API密钥有效性:检查密钥是否在OpenAI后台处于活跃状态,是否有足够调用额度,且未被限制访问Completion接口。
  • 检查应用网络权限:在AndroidManifest.xml中确认添加了网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 修复请求体构建方式:手动拼接JSON容易因特殊字符(如引号、换行)导致格式错误,建议用序列化库构建请求体,示例如下:
    // 定义数据类
    data class CompletionRequest(
        val model: String,
        val prompt: String,
        val max_tokens: Int,
        val temperature: Double
    )
    
    // 替换手动拼接的requestBody部分
    val requestBody = Gson().toJson(CompletionRequest(
        model = "gpt-3.5-turbo-instruct",
        prompt = question,
        max_tokens = 500,
        temperature = 0.0
    )).toRequestBody("application/json".toMediaTypeOrNull())
    
  • 测试网络连通性:用Postman或浏览器测试https://api.openai.com/v1/completions是否能正常访问,排除地区网络限制或代理问题。

内容的提问来源于stack exchange,提问作者user24936837

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:13:13