为什么 Android Volley 无法检索 Android Q 上的数据?
Why does Android Volley fail to retrieve data on Android Q?
我正在使用 Volley 1.1.1 通过 URL 检索一些 JSON 数据。
我的示例取自官方 Android 文档:Send a simple request - 虽然它略有改动以使其更简单(请参见下面的代码)。
清单权限
我已经在我的清单中添加了适当的权限:
<uses-permission android:name="android.permission.INTERNET" />
在其他 Android 版本上成功测试
我已经测试并 运行 这个例子并且它 运行 在 :
上成功
- Android 7(牛轧糖)
- Android 8.1(奥利奥)
连接测试
我可以在设备 运行ning Android Q.
上通过浏览器检索数据(使用下面代码中显示的 URL)
Kotlin 代码
我记录了一路上的各种事情,这样我就可以知道它走了多远。
importSiteKeysButton!!.setOnClickListener {
Log.d("MainActivity", "import button clicked!")
val queue = Volley.newRequestQueue(it.context)
val url = "http://raddev.us/allsitekeys.json"
// Request a string response from the provided URL.
val stringRequest = StringRequest(
Request.Method.GET, url,
Response.Listener<String> { response ->
Log.d("MainActivity", "URL returned...")
Log.d("MainActivity","Response is: ${response}")
},
Response.ErrorListener {
Log.d("MainActivity", "That didn't work!")})
// Add the request to the RequestQueue.
queue.add(stringRequest)
}
在牛轧糖和奥利奥上我看到了预期的成功结果:
12-12 11:42:24.299 3273 3273 D MainActivity: import button clicked!
12-12 11:42:24.776 3273 3273 D MainActivity: URL returned...
12-12 11:42:24.776 3273 3273 D MainActivity: Response is: [{"HasSpecialChars":false,"HasUpperCase":false,"Key":"c3VwZXJzaXRl","MaxLength":0},{"HasSpecialChars":false,"HasUpperCase":false,"Key":"dGhyZWU=","MaxLength":0},{"HasSpecialChars":false,"HasUpperCase":false,"Key":"c2Vjb25kU2l0ZQ==","MaxLength":0},{"HasSpecialChars":false,"HasUpperCase":false,"Key":"eWV0QW5vdGhlcg==","MaxLength":0},{"MaxLength":0,"HasSpecialChars":false,"HasUpperCase":false,"Key":"IUAjJCVeJiooKXt9"}]
然而,在 Android Q 我每次都得到错误响应:
12-12 11:44:32.299 3273 3273 D MainActivity: import button clicked!
12-12 11:44:33.226 3273 3273 D MainActivity: That didn't work!
我是否缺少某些特殊许可或其他什么?
<application
android:usesCleartextTraffic="true"
...>
您可以尝试在清单中添加 usesClearTextTraffic=true 吗?
这可能是因为,由于 Android Pie,我们建议使用安全网络流量,因此 usesClearTextTraffic 的默认值为 false,因为 Android Pie
您可以阅读 this 文章以了解更多信息
我正在使用 Volley 1.1.1 通过 URL 检索一些 JSON 数据。
我的示例取自官方 Android 文档:Send a simple request - 虽然它略有改动以使其更简单(请参见下面的代码)。
清单权限
我已经在我的清单中添加了适当的权限:
<uses-permission android:name="android.permission.INTERNET" />
在其他 Android 版本上成功测试
我已经测试并 运行 这个例子并且它 运行 在 :
上成功- Android 7(牛轧糖)
- Android 8.1(奥利奥)
连接测试
我可以在设备 运行ning Android Q.
上通过浏览器检索数据(使用下面代码中显示的 URL)Kotlin 代码
我记录了一路上的各种事情,这样我就可以知道它走了多远。
importSiteKeysButton!!.setOnClickListener {
Log.d("MainActivity", "import button clicked!")
val queue = Volley.newRequestQueue(it.context)
val url = "http://raddev.us/allsitekeys.json"
// Request a string response from the provided URL.
val stringRequest = StringRequest(
Request.Method.GET, url,
Response.Listener<String> { response ->
Log.d("MainActivity", "URL returned...")
Log.d("MainActivity","Response is: ${response}")
},
Response.ErrorListener {
Log.d("MainActivity", "That didn't work!")})
// Add the request to the RequestQueue.
queue.add(stringRequest)
}
在牛轧糖和奥利奥上我看到了预期的成功结果:
12-12 11:42:24.299 3273 3273 D MainActivity: import button clicked!
12-12 11:42:24.776 3273 3273 D MainActivity: URL returned...
12-12 11:42:24.776 3273 3273 D MainActivity: Response is: [{"HasSpecialChars":false,"HasUpperCase":false,"Key":"c3VwZXJzaXRl","MaxLength":0},{"HasSpecialChars":false,"HasUpperCase":false,"Key":"dGhyZWU=","MaxLength":0},{"HasSpecialChars":false,"HasUpperCase":false,"Key":"c2Vjb25kU2l0ZQ==","MaxLength":0},{"HasSpecialChars":false,"HasUpperCase":false,"Key":"eWV0QW5vdGhlcg==","MaxLength":0},{"MaxLength":0,"HasSpecialChars":false,"HasUpperCase":false,"Key":"IUAjJCVeJiooKXt9"}]
然而,在 Android Q 我每次都得到错误响应:
12-12 11:44:32.299 3273 3273 D MainActivity: import button clicked!
12-12 11:44:33.226 3273 3273 D MainActivity: That didn't work!
我是否缺少某些特殊许可或其他什么?
<application
android:usesCleartextTraffic="true"
...>
您可以尝试在清单中添加 usesClearTextTraffic=true 吗?
这可能是因为,由于 Android Pie,我们建议使用安全网络流量,因此 usesClearTextTraffic 的默认值为 false,因为 Android Pie
您可以阅读 this 文章以了解更多信息