如何在Android Studio中使用Fuel库传入XML并获取JSON响应
在Android Studio中使用Fuel库发送XML请求并获取JSON响应
嘿,这事儿不难,我一步步给你讲清楚怎么操作:
1. 先添加Fuel库依赖
首先得把Fuel库引入你的Android项目里。打开模块级的build.gradle(通常是app/build.gradle),在dependencies块里加入下面的依赖:
implementation 'com.github.kittinunf.fuel:fuel:2.3.1' // 如果需要便捷的JSON解析工具,也可以加上这个 implementation 'com.github.kittinunf.fuel:fuel-gson:2.3.1'
添加完后点击Sync Now同步项目即可。
2. 准备你的XML请求体
你给出的XML脚本可以直接作为字符串来用,用三重引号包裹就能避免转义麻烦:
val xmlRequestBody = """ <osm-script output="json"> <query into="_" type="node"> <has-kv k="amenity" modv="" v="toilets"/> <around from="_" into="_" lat="52.51633" lon="13.37751" radius="1000"/> </query> <print e="" from="_" geometry="skeleton" limit="" mode="body" n="" order="id" s="" w=""/> </osm-script> """.trimIndent()
3. 发送POST请求并处理响应
接下来就是用Fuel发送POST请求,关键是要设置正确的请求头,告诉服务器你发送的是XML格式的数据,然后接收JSON响应。这里给你一个完整的代码示例(可以放在Activity的onCreate里,或者ViewModel的协程中):
import com.github.kittinunf.fuel.Fuel import com.github.kittinunf.fuel.core.Headers import com.github.kittinunf.result.Result // 这里用Overpass API作为示例地址,你可以替换成实际要请求的接口 val apiUrl = "https://overpass-api.de/api/interpreter" // 发送POST请求 Fuel.post(apiUrl) // 设置请求头:Content-Type为application/xml,告知服务器请求体格式 .header(Headers.CONTENT_TYPE to "application/xml") // 传入准备好的XML请求体 .body(xmlRequestBody) // 执行请求并处理响应 .responseString { request, response, result -> when (result) { is Result.Success -> { // 请求成功,拿到JSON格式的响应字符串 val jsonResponse = result.get() // 这里可以对JSON进行解析,比如用Gson、Moshi等工具处理 println("JSON响应内容:$jsonResponse") // 你的业务逻辑处理代码... } is Result.Failure -> { // 请求失败,处理错误信息 val error = result.getException() println("请求出错啦:${error.message}") // 错误提示或重试逻辑... } } }
4. 别忘了加网络权限
在AndroidManifest.xml里一定要加上网络权限,否则请求会直接失败:
<uses-permission android:name="android.permission.INTERNET"/>
额外小提示
- 如果你的项目用Kotlin协程,也可以用Fuel的协程版本,代码会更简洁:
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch GlobalScope.launch { try { val (request, response, result) = Fuel.post(apiUrl) .header(Headers.CONTENT_TYPE to "application/xml") .body(xmlRequestBody) .responseString() val jsonResponse = result.get() println("JSON响应内容:$jsonResponse") } catch (e: Exception) { println("请求出错:${e.message}") } }
- 要是你请求的是HTTP地址(非HTTPS),在Android 9及以上版本需要在
AndroidManifest.xml的<application>标签里添加android:usesCleartextTraffic="true",不过现在大部分公开API都是HTTPS,这个一般不用管。
内容的提问来源于stack exchange,提问作者Dipesh Khawase
相关产品推荐
相关产品推荐

