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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:55:57