在GET中使用Kotlin中的Fuel可以运行,但POST不起作用

时间:2019-07-29 20:34:14

标签: post kotlin fuel

我正在使用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代码中缺少某些内容。我不知道是什么...也许是一些简单的设置?任何想法将不胜感激!

2 个答案:

答案 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代码中,但实际上是在服务器端。