Android 网络请求

异步get请求


    private fun asyncGet() {
        val url = ""
        //创建request请求对象
        val request = Request.Builder()
            .url(url)
            //.method()方法与.get()方法选取1种即可
            .method("GET", null)
            .build()
 
        //创建call并调用enqueue()方法实现网络请求
        OkHttpClient().newCall(request)
            .enqueue(object : Callback {
                override fun onFailure(call: Call, e: IOException) {
                }
 
                override fun onResponse(call: Call, response: Response) {
                }
            })
    }

异步post请求


    private fun asyncPost() {
        val url = ""
        //添加post请求参数
        val requestBody = FormBody.Builder()
            .add("userName", "name")
            .add("passWord", "pass")
            .build()

		//发送josn
		//var jsonObject = JSONObject()  
	    //jsonObject.put("studentNumber","1713630001")  
	    //jsonObject.put("password","123456")  
	    //val requestBody=jsonObject.toString().toRequestBody("application/json".toMediaType())  

        //创建request请求对象
        val request = Request.Builder()
            .url(url)
            .post(requestBody)
            .build()
 
        //创建call并调用enqueue()方法实现网络请求
        OkHttpClient().newCall(request)
            .enqueue(object : Callback {
                override fun onFailure(call: Call, e: IOException) {
                }
 
                override fun onResponse(call: Call, response: Response) {
                }
            })
    }

post json


private fun asyncPost() {  
    val url = "http://8.137.8.86/api/student/login"  
    var jsonObject = JSONObject()  
    jsonObject.put("studentNumber","1713630001")  
    jsonObject.put("password","123456")  
    val jsonBody=jsonObject.toString().toRequestBody("application/json".toMediaType())  

  
    //创建request请求对象  
    val request = Request.Builder()  
        .url(url)  
        .post(jsonBody)  
        .build()  
  
    //创建call并调用enqueue()方法实现网络请求  
    OkHttpClient().newCall(request)  
        .enqueue(object : Callback {  
            override fun onFailure(call: Call, e: IOException) {  
            }  
  
            override fun onResponse(call: Call, response: Response) {  
                response.body?.string()?.let { Log.d("resp", it) }  
            }  
        })  
}

等待数据,刷新ui

private fun asyncPost() {  

	Thread{
		//为了防止堵塞主线程,在开启一个线程
		//把下面代码放到这里
		val url = "http://8.137.8.86/api/student/login"  
	    var jsonObject = JSONObject()  
	    jsonObject.put("studentNumber","1713630001")  
	    jsonObject.put("password","123456")  
	    val jsonBody=jsonObject.toString().toRequestBody("application/json".toMediaType())  
	
	  
	    //创建request请求对象  
	    val request = Request.Builder()  
	        .url(url)  
	        .post(jsonBody)  
	        .build()  
	  
	    //创建call并调用enqueue()方法实现网络请求  
	    OkHttpClient().newCall(request)  
	        .enqueue(object : Callback {  
	            override fun onFailure(call: Call, e: IOException) {  
	            }  
	  
	            override fun onResponse(call: Call, response: Response) {  
	                response.body?.string()?.let { Log.d("resp", it) } 
	                runOnUiThread{
		                //do something
	                } 
	            }  
	        })  
	}.start()
	

}

解析json数据


object FastJsonTest {  
    @JvmStatic  
    fun main(args: Array<String>) {  
        parse()  
        tojson()  
        parseArray()  
    }  
  
    /**  
     * 解析json数据  
     */  
    fun parse() {  
        //JSON对象通常被序列化,也就是字符串形式  
        val jsonstr =  
            "{code:0,msg:'查询用户信息' , user:{id:12,name:'Herrona'},list:[{id:1,name:'yg'},{id:2,name:'yf'}]}"  
        //最顶层的JSON对象  
        val root = JSONObject.parseObject(jsonstr)  
        println("json数据:$root")  
        //获得整型数据  
        val code = root.getInteger("code")  
        //获得字符串型数据  
        val msg = root.getString("msg")  
        println("代码:$code")  
        println("消息:$msg")  
        //获得对象  
        val user = root.getJSONObject("user")  
        println("学号:" + user.getInteger("id"))  
        println("姓名:" + user.getString("name"))  
        //获得数组类型的属性  
        val list = root.getJSONArray("list")  
        //遍历数组  
        for (i in list.indices) {  
            val obj = list[i] as JSONObject  
            print("账号:" + obj.getIntValue("id") + "\t")  
            println("姓名:" + obj.getString("name"))  
        }  
    }  
  
    /**  
     * 将某java对象转换为json对象  
     */  
    fun tojson() {  
        val user = User()  
        user.id = 12  
        user.name = "Herrona"  
        val list: MutableList<User> = ArrayList()  
        list.add(User(1, "yg"))  
        list.add(User(2, "yf"))  
        println("将java对象转换为json对象:" + JSON.toJSON(user))  
        println("将java对象列表转换为json对象:" + JSON.toJSON(list))  
    }  
  
    /**  
     * 解析数组类型  
     */  
    fun parseArray() {  
        val jsonstr = "[{'name':'yg','id':1},{'name':'yf','id':2}]"  
        //顶层是数组  
        val arr = JSON.parseArray(jsonstr)  
  
        //遍历数组  
        for (i in arr.indices) {  
            val obj = arr[i] as JSONObject  
            print("账号:" + obj.getIntValue("id") + "\t")  
            println("姓名:" + obj.getString("name"))  
        }  
  
        //已知元素类型  
        val list = JSON.parseArray(jsonstr, User::class.java) //第二个参数指定元素类型  
        for (user in list) {  
            println(user)  
        }  
    }  
}  
  
/**  
 * Title: User * Description:  用户对象  
 * @author Herrona  
 */internal class User {  
    var id: Int? = null  
    var name: String? = null  
  
    constructor() {}  
    constructor(id: Int?, name: String?) : super() {  
        this.id = id  
        this.name = name  
    }  
  
    override fun toString(): String {  
        return "学号:$id\t姓名:$name"  
    }  
}