网络请求解析数据 Pull方式解析XML数据 /** * pull 解析 xml */ class MainActivity5 : AppCompatActivity() { private val mBinding by lazy { ActivityMain5Binding.inflate(layoutInflater) } private fun sendRequestWithOkHttp() { thread{ try { val client = OkHttpClient() val request = Request.Builder() .url("<http://10.0.2.2/get_data.xml>") .build() val response = client.newCall(request).execute() val responseData = response.body?.string() if (responseData != null){ parseXMLWithPull(responseData) } }catch (e: Exception){ e.printStackTrace() } } } private fun parseXMLWithPull(xmlData: String) { try { val factory = XmlPullParserFactory.newInstance() val xmlPullParser = factory.newPullParser() xmlPullParser.setInput(StringReader(xmlData)) var eventType = xmlPullParser.eventType var id = "" var name = "" var version = "" while (eventType != XmlPullParser.END_DOCUMENT) { val nodeName = xmlPullParser.name when (eventType) { // 开始解析某个节点 XmlPullParser.START_TAG -> { when (nodeName) { "id" -> id = xmlPullParser.nextText() "name" -> name = xmlPullParser.nextText() "version" -> version = xmlPullParser.nextText() } } // 完成解析某个节点 XmlPullParser.END_TAG -> { if ("app" == nodeName) { Log.d("MainActivity", "id is $id") Log.d("MainActivity", "name is $name") Log.d("MainActivity", "version is $version") } } } eventType = xmlPullParser.next() } } catch (e: Exception) { e.printStackTrace() } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(mBinding.root) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } mBinding.sendRequestBtn.setOnClickListener { Log.d("MainActivity", "发送请求 ") sendRequestWithOkHttp() } } } ...