我正在使用Fuel在Kotlin中进行服务器调用,但是尽管GET版本有效,但POST似乎没有将任何内容传递给服务器。
我的代码基于不错的Fuel Kotlin tutorial by Mushtaq:
val parameters = listOf("something" to "100")
fun httpPostJson(view: View) {
try {
Fuel.post(PATH, parameters).responseJson { request, response, result ->
tvPostResponse!!.text = result.get().content
}
} catch (e: Exception) {
tvPostResponse!!.text = e.message
} finally {
progress!!.dismiss()
}
}
服务器脚本只是一个PHP文件,它为$ _REQUEST,$ _ GET和$ _POST执行var_dump()。它显示了Fuel.get()的期望值,但对于Fuel.post()调用,它们都是array(0)。我试过从常规网页上调用它,并且它对于GET和POST都可以正常工作,所以好像我在Kotlin代码中缺少某些内容。我不知道是什么...也许是一些简单的设置?任何想法将不胜感激!
答案 0 :(得分:0)
您可以尝试将其更改为以下内容,以查看是否观察到任何状态码或4xx状态码或任何错误。
import com.github.kittinunf.result.Result as FuelResult
val parameters = listOf("something" to "100")
fun httpPostJson(view: View) {
try {
Fuel.post(PATH, parameters)
.responseJson { request, response, result ->
var data
when (result) {
is FuelResult.Failure -> {
println( String(response.data)) // response.data {"statusCode":401,"error":"Unauthorized","message":"invalid session"}
data = String(response.data);
}
is FuelResult.Success -> {
data = result.get().content
println(data) // response.statusCode is also available if we need to go that route.
}
}
tvPostResponse!!.text = data
}
} catch (e: Exception) {
tvPostResponse!!.text = e.message
} finally {
progress!!.dismiss()
}
此外,帖子中的帖子请求中没有传递任何正文。确保与服务的合同正确。
答案 1 :(得分:0)
事实证明,问题在于服务器域的格式为domain.com,托管提供商自动将其映射到www.domain.com,这影响了POST,但没有影响GET。
在Kotlin代码中的域中添加“ www”即可解决此问题。因此,尽管从技术上讲问题出在Kotlin代码中,但实际上是在服务器端。