首页 > 解决方案 > Android Retrofit Api 响应在参数正文中传递查询令牌时给出 null

问题描述

下图是在邮递员上运行良好的 whatsap api 的响应。在此处输入图像描述

但是当我尝试通过使用改造在 android 项目上运行它时,它给出了空响应。

这是我在 Andorid 中的 api 参数:

fun getData(mainActivity: MainActivity): Boolean {
        val params = HashMap<String, Any>()
        params["phone"] = "+923364451111@c.us"
        params["body"] = "Zeeshan Hello, world! "

            retrofitClient.abc("01jideaw5zab024y", params).enqueue(object : Callback<Whatsapp> {
                override fun onResponse(call: Call<Whatsapp>, response: Response<Whatsapp>) {
                    Log.d("SoS", "response: " + response.body())
                    Log.d("SoS", "response: " + response.body()?.sent)
                }

                override fun onFailure(call: Call<Whatsapp>, t: Throwable) {
                    Log.d("SoS", "error: " + t.message)
                }
            })
}

我使用的端点是这样的:

@POST("/sendMessage")
fun abc(@Query("token") token: String, @Body body: HashMap<String, Any>): Call<Whatsapp>

这是我的 Whatsapp 课程:

class Whatsapp{
    @SerializedName("sent")
    @Expose
    var sent: Boolean? = null

    @SerializedName("message")
    @Expose
    var message: String? = null

    @SerializedName("id")
    @Expose
    var id: String? = null

    @SerializedName("queueNumber")
    @Expose
    var queueNumber: Int? = null
}

我想我没有正确使用参数。任何人都可以在这里帮助我如何使用参数。

标签: androidparametersretrofittokenwhatsapi

解决方案


我认为这不足以容纳评论,所以我将添加作为答案。我猜测这里的一些事情。

我最简单的猜测与您在 URL 中的路径有关。如图所示,它应该是instance259349/sendMessage,但在您的界面中,您有:

@POST("/sendMessage")

即使改造实例中的基本 url 是https://api.chat-api.com/instance259349,它也会转换为https://api.chat-api.com/sendMessage(没有实例部分),因为改造如何对待leading /。检查这一点的一种快速方法是删除前导/并仅使用@POST("sendMessage"),或者,如果您的基本 url 不包含实例部分,请使用@POST("instance259349/sendMessage").


可能发生的另一个问题是 Postman 在后台添加了您的应用程序没有的标题。服务器可能需要这些标头,因此它会返回错误。

我建议您查看response.errorBody()响应的状态以及响应的状态,以了解您遇到的错误。请注意,如果我的第一个猜测是正确的,您可能会得到一个404 NOT FOUND,因为该路径不存在。

如果您不想手动检查它,一个更轻松的好方法是使用日志拦截器


推荐阅读