java、kotlinはajax機能のパッケージを実現します。
2889 ワード
前言
最近はプロジェクトを書きます。Androidの中でajaxをシミュレーションして要求を送ります。機能は複雑ではありません。java.net.HttpURLConnectを使ってこの機能を実現できます。
整理して、コードを下記のように簡潔にします。
kotlinバージョン
使用例
最近はプロジェクトを書きます。Androidの中でajaxをシミュレーションして要求を送ります。機能は複雑ではありません。java.net.HttpURLConnectを使ってこの機能を実現できます。
整理して、コードを下記のように簡潔にします。
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のフィールド情報を得ています。正しいやり方はByteAray.toString(Charett.default Charer()を使用しています。具体的にはどの文字コードのフォーマットが必要ですか?同じように、データを送る場合は、文字列msg.toBytearray(Charett.default Charrset())に対しても、同様に自分の工程の状況に応じて確定する必要があります。