Android Retrofit使用SimpleXml和Gson解析数据并打印XML数据
使用Retrofit解析JSON和XML数据并打印XML数据
本示例演示了如何在Android应用中使用Retrofit库解析来自服务器的JSON和XML数据,并使用SimpleXml和Gson库进行数据转换。同时,示例还展示了如何利用XmlPullParser库解析XML数据,并打印出XML中的id和name。
代码示例:
package com.example.retrofittest
import androidx.appcompat.app.AppCompatActivity
import retrofit2.converter.simplexml.SimpleXmlConverterFactory
import retrofit2.Call
import android.os.Bundle
import android.util.Log
import com.example.retrofittest.databinding.ActivityMainBinding
import okhttp3.ResponseBody
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserFactory
import java.io.InputStream
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.getAppDataBtn.setOnClickListener {
//Retrofit.Builder来构建一个Retrofit对象
val retrofit = Retrofit.Builder()
//baseUrl()方法用于指定所有Retrofit请求的根路径
.baseUrl("http://192.168.0.116/")
.addConverterFactory(SimpleXmlConverterFactory.create())
//addConverterFactory()方法用于指定Retrofit在解析数据时所使用的转换库
.addConverterFactory(GsonConverterFactory.create())
.build()
val appService = retrofit.create(AppService::class.java)
val appServicexml = retrofit.create(AppServicexml::class.java)
//调用了AppService的getAppData()方法,
appService.getAppData().enqueue(object : Callback<List<App>> {
override fun onResponse(call: Call<List<App>>, response: Response<List<App>>) {
val list = response.body()
if (list != null) {
for (app in list) {
Log.d("MainActivity", "id is ${app.id}")
Log.d("MainActivity", "name is ${app.name}")
Log.d("MainActivity", "version is ${app.version}")
}
}
}
override fun onFailure(call: Call<List<App>>, t: Throwable) {
t.printStackTrace()
}
})
appServicexml.getAppData().enqueue(object : Callback<ResponseBody> {
override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
val xmlData = response.body()?.string()
// 处理XML数据
val inputStream = xmlData?.byteInputStream()
if(inputStream != null){
val xmlParser = XmlParser()
val apps = xmlParser.parseXml(inputStream)
for (app in apps) {
Log.d("MainActivity", "id is ${app.id}")
Log.d("MainActivity", "name is ${app.name}")
}
}
}
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
t.printStackTrace()
}
})
}
}
}
class XmlParser {
fun parseXml(inputStream: InputStream): List<App> {
val apps = mutableListOf<App>()
var id = ""
var name = ""
var version = ""
try {
val factory = XmlPullParserFactory.newInstance()
factory.isNamespaceAware = true
val parser = factory.newPullParser()
parser.setInput(inputStream, null)
var eventType = parser.eventType
while (eventType != XmlPullParser.END_DOCUMENT) {
val tagName = parser.name
when (eventType) {
XmlPullParser.START_TAG -> {
if (tagName == "id") {
id = parser.nextText()
} else if (tagName == "name") {
name = parser.nextText()
} else if (tagName == "version") {
version = parser.nextText()
}
}
XmlPullParser.END_TAG -> {
if (tagName == "app") {
apps.add(App(id, name, version))
}
}
}
eventType = parser.next()
}
} catch (e: Exception) {
e.printStackTrace()
}
return apps
}
}
代码说明:
- 使用
Retrofit.Builder创建Retrofit对象,并指定基础URL和数据转换库(SimpleXmlConverterFactory和GsonConverterFactory)。 - 创建接口
AppService和AppServicexml,分别用于处理JSON和XML数据。 - 使用
retrofit.create()方法创建AppService和AppServicexml的实例。 - 使用
enqueue()方法异步请求数据,并使用Callback接口处理响应。 - 在
onResponse()方法中,使用response.body()获取数据并进行处理。 - 使用
XmlParser类解析XML数据,并打印出id和name。
总结:
本示例展示了如何在Android应用中使用Retrofit库解析来自服务器的JSON和XML数据,并使用SimpleXml和Gson库进行数据转换。同时,示例还展示了如何利用XmlPullParser库解析XML数据,并打印出XML中的id和name。
注意:
- 请确保您的服务器能够返回JSON和XML数据。
- 请确保您已经添加了必要的依赖库。
- 请根据您的实际情况修改代码。
其他相关内容:
希望本示例能够帮助您了解如何在Android应用中使用Retrofit库解析来自服务器的JSON和XML数据。
原文地址: https://www.cveoy.top/t/topic/qqhu 著作权归作者所有。请勿转载和采集!