Android Studio中Volley二次请求遇Bad URL问题求助
问题分析与解决方案
核心问题点
- 错误的循环逻辑:你对单个
JsonObject使用了for (i in 0 until response.length())循环,response.length()返回的是JSON键值对的数量,而非数组长度,这会导致重复赋值,还可能引发变量处理异常。 - 图片链接传递错误:代码中未正确将
response.getString("Poster")赋值给变量就发起后续请求,导致传递给图片请求的链接无效。 - 异步请求处理错误:图片请求是异步操作,你在发起请求后立刻调用
imgView.setImageBitmap(img),此时图片还未加载完成,初始空Bitmap无法显示。 - 字符串资源可能存在问题:若
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
相关产品推荐
相关产品推荐

