一.HttpURLConnection关于字符流的步骤。
- 获取字节流(InputStream)
- 通过读取InputStreamReader 读取
- 通过BufferedReader 读取InputStreamReader(inputStream)
- 创建String(StringBuilder)
private fun sendRequestWithHttpURLConnection(){
thread{
var connection:HttpURLConnection?=null
val response=StringBuilder()
try{
val url=URL("https://www.baidu.com")
connection=url.openConnection as HttpURLConnection
connection.connectTimeOut=8000
connection.readTimeOut=8000
val reader= BufferedReader(InputStreamReader(connection.inputStream))
reader.use{
reader.forEachLine{
response.append(it)
}
}
}catch(e:Exception){
e.printStackTrace()
}finally{
connection?.disconnect()
}
}
}
二.OkHttp的基本用法
- 创建OkHttpClient的实例。
- 创建一个Request 对象
- 调用OkHttpClient的newCall()对象,并且调用execute()方法返回服务器的数据
private fun sendRequestWithOkHttp(){
thread{
try{
val okHttpClient=OkHttpClient()
val request=Request.Builder()
.url("https://www.baidu.com")
.build()
val response=okHttpClient.newCall(request).execute()
val responseData= response.body?.string()
}catch(e:Exception){
e.printStackTrace()
}
}
}
以上就是一个简单的Get请求,如果要向服务器POST数据就要多一些步骤。
POST: 创建一个Request Body对象来存放数据。
val requestBody=FormBody.Bulider()
.add("userName","EL")
.add("password","123456")
.bulid()
val request= Request.Builder()
.url("https://www.baidu.com")
.post(requestBody)
.build()
最后进行UI更新记得使用runOnUiThread, 因为Android 是不允许在子线程进行UI操作的。 runOnUiThread()方法其实就是对异步消息处理机制进行了一层封装。