android - 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
}
我想我没有正确使用参数。任何人都可以在这里帮助我如何使用参数。
解决方案
我认为这不足以容纳评论,所以我将添加作为答案。我猜测这里的一些事情。
我最简单的猜测与您在 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
,因为该路径不存在。
如果您不想手动检查它,一个更轻松的好方法是使用日志拦截器。
推荐阅读
- r - 如何通过不同文件夹中的多个文件读取并根据从中检索它们的文件夹单独存储它们?
- json - 密钥“身份验证”的值无效
- python - PySide2 + QML:QApplication:通过了无效的样式覆盖,忽略它
- powershell - 命令中的 Powershell 对象字段
- javascript - Javafx:如何定位场景的元素
- java - 重绘 Canvas 的内容
- python - 自动粘贴(Ctrl + v)而不是使用 pyautogui?
- javascript - jQuery 没有执行 .then()
- swiftui - .environmentObject() 视图运算符与@EnvironmentObject 的目的是什么?
- c# - 使用 System.Text.Json 一次读取一条记录