Android 使用GSON截击自定义Post请求
我是截击新手,我只想问一下如何使用Android 使用GSON截击自定义Post请求,android,kotlin,android-volley,Android,Kotlin,Android Volley,我是截击新手,我只想问一下如何使用GSON发布请求 以下是本教程: 这是我的对象类 class Account { @SerializedName("status") var status: String? = null @SerializedName("token") var token: String? = null @SerializedName("user") var user: AccountInfo? = null } clas
GSON
发布请求
以下是本教程:
这是我的对象类
class Account {
@SerializedName("status")
var status: String? = null
@SerializedName("token")
var token: String? = null
@SerializedName("user")
var user: AccountInfo? = null
}
class AccountInfo(val id: Int, val username: String, val password: String)
这是我的请求函数
private fun doRequest() {
val url = "http://www.xxxwebportalxxx.com/api/user/login/"
val queue = Volley.newRequestQueue(this)
val jsonObject = JSONObject()
jsonObject.put("username", "user@gmail.com")
jsonObject.put("password", "123456xxx")
val hashMap = HashMap<String, String>()
hashMap["public-key"] = "0123456789qwertyuiop"
hashMap["Content-Type"] = "application/x-www-form-urlencoded"
val gsonRequest = GsonRequest(url, Account::class.java, hashMap, jsonObject,
Response.Listener { response ->
Log.i("response", "$response")
},
Response.ErrorListener {
}
)
queue.add(gsonRequest)
}
这就是我在执行doRequest()
时得到的结果
在请求发布帖子时,我是否遗漏了什么或我的代码真的错了?帮帮我,伙计们,谢谢 我不会骗你,我更喜欢改装而不是截击。然而,我有我的理由选择这个。首先,改造的目的是使使用RESTful web服务变得更容易,而Volley的目标是专门处理Android的所有网络需求。其次,与凌空相比,改装更易于使用。一般Android开发者可能会遇到截击的问题,因为它需要一些经验来掌握。最后,响应时间
- 3个字段的改装柱平均耗时14毫秒李>
- 有3个字段的截击本地帖子平均耗时18毫秒
我建议你使用改装来申请职位。这里是关于您的POST改装方法的教程
谢谢你的建议。我将阅读教程链接。@JasurKurbanov所以你更喜欢改装而不是截击;)感谢您的评论您确定application/x-www-form-urlencoded
是正确的内容类型吗?因为你的身体是一个JSON,所以我把application/JSON
。也许这就是你的问题所在,内容类型是application/x-www-form-urlencoded
我应该做些什么更改吗?如果你正在实现任何类型的web客户端-安装调试代理。您将确切地看到设备输出的内容以及响应中返回的内容。然后很容易将其与文档进行比较。我使用的是Charles proxy,但您可以使用mitm甚至stetho。@dotGitignore这取决于Web服务的期望。可能它同时接受这两种内容类型,但如果将JSON放在内容类型为application/x-www-form-urlencoded
的位置,服务器可能无法正确解析JSON
class GsonRequest<T>(
url: String,
private val clazz: Class<T>,
private val headers: MutableMap<String, String>?,
private val data: JSONObject,
private val listener: Response.Listener<T>,
errorListener: Response.ErrorListener
) : Request<T>(Method.POST, url, errorListener) {
private val gson = Gson()
override fun getBody(): ByteArray {
return gson.toJson(data).toByteArray()
}
override fun getHeaders(): MutableMap<String, String> = headers ?: super.getHeaders()
override fun deliverResponse(response: T) = listener.onResponse(response)
override fun parseNetworkResponse(response: NetworkResponse?): Response<T> {
return try {
val json = String(
response?.data ?: ByteArray(0),
Charset.forName(HttpHeaderParser.parseCharset(response?.headers)))
Response.success(
gson.fromJson(json, clazz),
HttpHeaderParser.parseCacheHeaders(response))
} catch (e: UnsupportedEncodingException) {
Response.error(ParseError(e))
} catch (e: JsonSyntaxException) {
Response.error(ParseError(e))
}
}
}
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
D/Volley: [320] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://www.xxxwebportalxxx.com/api/user/login/ 0xc0da6ea6 NORMAL 1> [lifetime=6043], [size=16], [rc=401], [retryCount=1]
E/Volley: [298] BasicNetwork.performRequest: Unexpected response code 401 for http://www.xxxwebportalxxx.com/api/user/login/
{
"status" : true,
"token" : "fake-token-generated",
"user": {
"id": "1",
"username": "user@gmail.com",
"password": "123456xxx"
}
}