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

Android Studio中Volley二次请求遇Bad URL问题求助

问题分析与解决方案

核心问题点

  1. 错误的循环逻辑:你对单个JsonObject使用了for (i in 0 until response.length())循环,response.length()返回的是JSON键值对的数量,而非数组长度,这会导致重复赋值,还可能引发变量处理异常。
  2. 图片链接传递错误:代码中未正确将response.getString("Poster")赋值给变量就发起后续请求,导致传递给图片请求的链接无效。
  3. 异步请求处理错误:图片请求是异步操作,你在发起请求后立刻调用imgView.setImageBitmap(img),此时图片还未加载完成,初始空Bitmap无法显示。
  4. 字符串资源可能存在问题:若R.string.url的格式中缺少%s占位符,会导致链接无法正确插入到TextView中。

修正后的代码

1. 修正JsonObjectRequest部分

val request = JsonObjectRequest(Request.Method.GET, requestURL, null, { response ->
    // 直接提取JSON字段,移除多余循环
    val title = response.getString("Title")
    val rated = response.getString("Rated")
    val plot = response.getString("Plot")
    val genre = response.getString("Genre")
    val runtime = response.getString("Runtime")
    val posterLink = response.getString("Poster") // 正确存储图片链接

    // 更新UI组件
    txtName.text = getString(R.string.name, title)
    txtRating.text = getString(R.string.rating, rated)
    txtSummary.text = getString(R.string.summary, plot)
    txtGenre.text = getString(R.string.genre, genre)
    txtLength.text = getString(R.string.length, runtime)
    txtUrl.text = getString(R.string.url, posterLink) // 确保链接正确传入

    Log.d("Poster Link", posterLink)
    Log.d("Response", "$response")

    // 在JSON请求成功回调内发起图片请求,保证链接有效
    imgRequest(posterLink)
}, {
    Log.d("Error Message", "Error: ${it.message}")
})

request.setShouldCache(false)
RequestHandler.getInstance(applicationContext).addToRequestQueue(request)

2. 修正图片请求函数

fun imgRequest(link: String) {
    val imageRequest = ImageRequest(
        link,
        { response ->
            // 图片加载成功后再更新ImageView
            imgView.setImageBitmap(response)
            Log.d("Image Request Function", "Image loaded successfully")
        },
        0,
        0,
        ImageView.ScaleType.FIT_CENTER,
        Bitmap.Config.ARGB_8888,
        {
            Log.d("Error Message", "Image request error: ${it.message}")
        }
    )

    imageRequest.setShouldCache(false)
    RequestHandler.getInstance(applicationContext).addToRequestQueue(imageRequest)
}

额外检查项

  • 确认res/values/strings.xml中R.string.url的格式正确,例如:<string name="url">图片链接:%s</string>,必须包含%s占位符来接收链接参数。
  • 检查AndroidManifest.xml是否声明了网络权限:<uses-permission android:name="android.permission.INTERNET" />。
  • 若运行在Android 9及以上版本,确保图片链接为HTTPS(你的链接符合要求),避免明文流量限制问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:22:51