Android中用Async Http Client调用GPT图像生成API失败求助
解决Async Http Client调用OpenAI图像生成API失败问题
在Android Studio中使用Async Http Client调用OpenAI图像生成API生成图片时,每次调用均失败,相关代码如下:
fun getaiimage(prompt: String) { val client = AsyncHttpClient() val params = RequestParams() // apikey val apikey = "API_KEY" // Api parameters params["prompt"] = prompt params["size"] = "256x256" params.put("n", 1) params["response_format"] = "https://api.openai.com/v1/images/generations" params["model"] = "image-beta-003" params["Authorization"] = "Bearer $apikey" client["https://api.openai.com/v1/images/generations", params, object : JsonHttpResponseHandler() { override fun onFailure( statusCode: Int, headers: Headers?, response: String?, throwable: Throwable? ) { Log.d("Image Failed", "Big Errors") } override fun onSuccess(statusCode: Int, headers: Headers?, response: JSONObject) { Log.d("Image Received", "No Errors") } }] }
错误分析及修正方案
以下是代码中的核心问题及对应修改:
请求方法错误
OpenAI图像生成API要求使用POST请求,但原代码使用client[]是GET请求的调用方式,需改为client.post()。参数配置错误
response_format参数值错误:该参数可选值为url或b64_json,原代码错误设置为API地址;model参数错误:正确的图像生成模型为dall-e-2或dall-e-3,原代码中的image-beta-003是无效值;Authorization不应放入RequestParams:身份认证信息需放在请求头中,而非请求参数。
- 请求头缺失
需添加Content-Type: application/json请求头,同时将Authorization放入请求头。
修正后的代码
fun getaiimage(prompt: String) { val client = AsyncHttpClient() val apiKey = "API_KEY" // 构建请求体JSON val requestBody = JSONObject().apply { put("prompt", prompt) put("size", "256x256") put("n", 1) put("response_format", "url") // 可选值:url / b64_json put("model", "dall-e-2") // 可选值:dall-e-2 / dall-e-3 } // 设置请求头 client.addHeader("Authorization", "Bearer $apiKey") client.addHeader("Content-Type", "application/json") client.post("https://api.openai.com/v1/images/generations", requestBody, object : JsonHttpResponseHandler() { override fun onFailure( statusCode: Int, headers: Headers?, responseString: String?, throwable: Throwable? ) { // 增加错误日志,便于排查 Log.e("Image Failed", "Status Code: $statusCode, Error: ${throwable?.message}, Response: $responseString") } override fun onSuccess(statusCode: Int, headers: Headers?, response: JSONObject) { Log.d("Image Received", "Response: $response") // 解析返回的图片URL val dataArray = response.getJSONArray("data") if (dataArray.length() > 0) { val imageUrl = dataArray.getJSONObject(0).getString("url") Log.d("Image URL", imageUrl) } } }) }
额外注意事项
- 确保替换
API_KEY为你的有效OpenAI API密钥; - 检查Android项目是否添加了网络权限(
android.permission.INTERNET); - 若使用
dall-e-3模型,需注意其支持的尺寸参数为1024x1024、1792x1024或1024x1792。
内容的提问来源于stack exchange,提问作者Shane
相关产品推荐
相关产品推荐

