java、kotlin实现对ajax功能的封装

前言

最近写一个项目,需要在android中模拟ajax发送请求,功能并不复杂,使用java.net.HttpURLConnection就可以实现该功能

经过整理,将代码精简如下

kotlin版本

    /**
     * @Description: 对ajax的请求服务,进行了封装,可以简单实现前端的ajax功能
     * @Param:
     * @return:
     * @Author: Heiheihie
     * @Date: 19-8-26
     **/
    public fun ajax(
        url: String,
        type: String,
        data: ByteArray?,
        dataType: String?,
        contentType: String?,
        cache: Boolean
    ): ByteArray {
        var connection: HttpURLConnection? = null
        var reader: InputStream? = null
        var writer: OutputStream? = null
        val recdata: ByteArray

        try {
            var url = URL(url)
            connection = url.openConnection() as HttpURLConnection
            connection.requestMethod = type.toUpperCase()
            //此请求参数必须设置
            dataType?.let {
                connection.setRequestProperty("dataType", dataType)
            }
            contentType?.let {
                connection.setRequestProperty("Content-Type", "application/json")
            }
            connection.defaultUseCaches = cache
            connection.connectTimeout = 5 * 1000
            connection.readTimeout = 5 * 1000


            connection.connect()
            //GET请求不需要上传数据
            if (!"GET".equals(connection.requestMethod)) {
                writer = BufferedOutputStream(connection.outputStream)
                data?.let {
                    //将数据发出
                    writer.write(data)
                    writer.flush()
                }
            }

            reader = BufferedInputStream(connection.inputStream)
            //读取全部的数据
            recdata = reader.readBytes()

        } catch (e: IOException) {
            e.printStackTrace()
            return byteArrayOf()
        } catch (ex: Exception) {
            ex.printStackTrace()
            return byteArrayOf()
        } finally {
            reader?.let {
                try {
                    it.close()
                } catch (exInner: Exception) {
                    exInner.printStackTrace()
                }
            }
            writer?.let {
                it.close()
            }

            connection?.disconnect()
        }

        return recdata
    }

java版本的代码,可以参考着进行改写

使用示例

	//url是ajax所连接的mapper位点,msg是需要发出的数据
    fun ajax_post_unknow(url: String, msg: String): String {
        var rec = ajax(url, "POST", msg.toByteArray(), "json", null, false)
        return rec.toString(Charset.defaultCharset())
    }

注意,有些时候接收字符串数据的时候,直接使用了ByteArray.toString()方法,得到的是@xxxx的类实地信息,正确做法是使用ByteArray.toString(Charset.defaultCharset())。具体哪种字符编码格式,需要自己确定。
同理,发送数据的时候,对字符串msg.toByteArray(Charset.defaultCharset()),同样需要根据自己工程的情况来确定。

你可能感兴趣的:(编程指南)