使用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
    }
}

代码说明:

  1. 使用Retrofit.Builder创建Retrofit对象,并指定基础URL和数据转换库(SimpleXmlConverterFactory和GsonConverterFactory)。
  2. 创建接口AppServiceAppServicexml,分别用于处理JSON和XML数据。
  3. 使用retrofit.create()方法创建AppServiceAppServicexml的实例。
  4. 使用enqueue()方法异步请求数据,并使用Callback接口处理响应。
  5. onResponse()方法中,使用response.body()获取数据并进行处理。
  6. 使用XmlParser类解析XML数据,并打印出id和name。

总结:

本示例展示了如何在Android应用中使用Retrofit库解析来自服务器的JSON和XML数据,并使用SimpleXml和Gson库进行数据转换。同时,示例还展示了如何利用XmlPullParser库解析XML数据,并打印出XML中的id和name。

注意:

  • 请确保您的服务器能够返回JSON和XML数据。
  • 请确保您已经添加了必要的依赖库。
  • 请根据您的实际情况修改代码。

其他相关内容:

希望本示例能够帮助您了解如何在Android应用中使用Retrofit库解析来自服务器的JSON和XML数据。

Android Retrofit使用SimpleXml和Gson解析数据并打印XML数据

原文地址: https://www.cveoy.top/t/topic/qqhu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录