MainActivity.kt

package com.example.fredric.sendrequestwithokhttp

import android.support.v7.app.AppCompatActivity

import android.os.Bundle

import android.util.Log

import android.view.View

import android.widget.Button

import android.widget.TextView

import com.google.gson.Gson

import com.google.gson.reflect.TypeToken

import okhttp3.OkHttpClient

import okhttp3.Request

import org.json.JSONArray

import org.xml.sax.InputSource

import org.xmlpull.v1.XmlPullParser

import org.xmlpull.v1.XmlPullParserFactory

import java.io.StringReader

import javax.xml.parsers.SAXParserFactory

inline fun KTypeToken() = object : TypeToken() {} .type

class MainActivity : AppCompatActivity(), View.OnClickListener{

var responseText: TextView? = null

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

var sendRequest = findViewById(R.id.send_request)

responseText = findViewById(R.id.response_text)

sendRequest.setOnClickListener(this)

}

override fun onClick(v: View?) {

if(v?.id == R.id.send_request) {

sendRequestWithOkHttp()

}

}

fun showResponse(responseData: String?) {

runOnUiThread(object: Runnable{

override fun run() {

responseText?.setText(responseData)

}

})

}

fun parseXMLWithPull(responseData:String) {

try {

var factory = XmlPullParserFactory.newInstance()

var pullParser = factory.newPullParser()

pullParser.setInput(StringReader(responseData))

var eventType = pullParser.eventType

var id = ""

var name = ""

var version = ""

while (eventType != XmlPullParser.END_DOCUMENT) {

var nodeName = pullParser.name

when(eventType) {

XmlPullParser.START_TAG -> {

if("id".equals(nodeName)) {

id = pullParser.nextText()

}else if("name".equals(nodeName)) {

name = pullParser.nextText()

}else if("version".equals(nodeName)) {

version = pullParser.nextText()

}

}

XmlPullParser.END_TAG -> {

if("app".equals(nodeName)) {

Log.d("MainActivity","id is: "+id)

Log.d("MainActivity","name is: "+name)

Log.d("MainActivity","version is: "+version)

}

}

else -> {

}

}

eventType = pullParser.next()

}

}catch (ex: Exception) {

ex.printStackTrace()

}

}

fun parseXMLWithSax(xmlData: String) {

try {

var factory = SAXParserFactory.newInstance()

var xmlReader = factory.newSAXParser().xmlReader

var handler = ContentHandler()

xmlReader.contentHandler = handler

xmlReader.parse(InputSource(StringReader(xmlData)))

}catch (ex: Exception) {

ex.printStackTrace()

}

}

fun parseJsonWithJsonObject(jsonData: String) {

try {

var jsonArray = JSONArray(jsonData)

for(i in 0..jsonArray.length()-1) {

var jsonObject = jsonArray.getJSONObject(i)

var id = jsonObject.getString("id")

var name = jsonObject.getString("name")

var version = jsonObject.getString("version")

Log.d("MainActvity","id is: "+id)

Log.d("MainActivity","name is: "+ name)

Log.d("MainActivity","version is: "+version)

}

}catch (ex: Exception) {

ex.printStackTrace()

}

}

fun parseJsonWithGson(jsonData: String) {

var gson = Gson()

var appList = gson.fromJson>(jsonData, KTypeToken>())

for(app in appList) {

Log.d("MainActivity","id is: "+app.id)

Log.d("MainActivity","name is: "+app.name)

Log.d("MainActivity","version is: "+app.version)

}

}

fun sendRequestWithOkHttp() {

Thread(object: Runnable{

override fun run() {

try {

var client = OkHttpClient()

var request = Request.Builder().

url("http://192.168.0.102/get_data.json").

build()

var response = client.newCall(request).execute()

var responseData = response.body().string()

showResponse(responseData)

// parseXMLWithPull(responseData)

// parseXMLWithSax(responseData)

// parseJsonWithJsonObject(responseData)

parseJsonWithGson(responseData)

}catch (ex: Exception) {

ex.printStackTrace()

}

}

}).start()

}

}

ContentHandler.kt

package com.example.fredric.sendrequestwithokhttp

import android.util.Log

import org.xml.sax.Attributes

import org.xml.sax.SAXException

import org.xml.sax.helpers.DefaultHandler

class ContentHandler : DefaultHandler() {

var nodeName: String? = null

var id: StringBuilder? = null

var name: StringBuilder? = null

var version: StringBuilder? = null

@Throws(SAXException::class)

override fun startDocument() {

id = StringBuilder()

name = StringBuilder()

version = StringBuilder()

}

@Throws(SAXException::class)

override fun endDocument() {

super.endDocument()

}

@Throws(SAXException::class)

override fun startElement(uri: String, localName: String, qName: String, attributes: Attributes) {

nodeName = localName

}

@Throws(SAXException::class)

override fun characters(ch: CharArray, start: Int, length: Int) {

if("id".equals(nodeName)) {

id?.append(ch,start,length)

}else if("name".equals(nodeName)) {

name?.append(ch,start,length)

}else if("version".equals(nodeName)) {

version?.append(ch, start, length)

}

}

@Throws(SAXException::class)

override fun endElement(uri: String, localName: String, qName: String) {

if("app".equals(localName)) {

Log.d("ContentHandler","id is :" + id?.toString()?.trim())

Log.d("ContentHandler","name is :" + name?.toString()?.trim())

Log.d("ContentHandler","version is :" + version?.toString()?.trim())

id?.setLength(0)

name?.setLength(0)

version?.setLength(0)

}

}

}

App.kt

package com.example.fredric.sendrequestwithokhttp

data class App(

var id: String?,

var name: String?,

var version: String?

)

程序运行效果,

Screen Shot 2018-07-24 at 6.38.15 AM.png

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐