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()),同樣需要根據自己工程的情況來確定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章