如何使用 Retrofit @Query调用 REST API



我无法在idCafe上获取数据库。

这是来自网络服务的网址:

https://admin-services-dot-annular-bucksaw-167705.appspot.com/_ah/api/meja?idCafe=123445

API 服务接口 :

@GET ("meja?idCafe")
fun getTable(@Query("idCafe") idCafe: String): Call<List<Table>>

我用这个函数调用 api:

private fun getTableList(idCafe:String){
val apiService : Service = Client.getClient()!!.create(Service::class.java)
apiService.getTable(idCafe).enqueue(object : Callback<List<Table>>{
override fun onResponse(call: Call<List<Table>>?, response: Response<List<Table>>?) {
Log.i("IdMeja", "id : " + response?.body())
if (response != null && response.isSuccessful) {
val listTable = response.body()
if (listTable == null || listTable.isEmpty()) {
Toast.makeText(this@MainActivity, "Tidak ada meja", Toast.LENGTH_SHORT).show()
}
else{
tableList = ArrayList(listTable)
// update list table
dataAdapter.updateData(tableList)
}
}
else{
Log.i("idCafe", " $idCafe")
Toast.makeText(this@MainActivity, "Gagal dapat meja", Toast.LENGTH_SHORT).show()
}
}
override fun onFailure(call: Call<List<Table>>?, t: Throwable?) {
Log.i("fail",t.toString() )
Toast.makeText(this@MainActivity, "Gagal", Toast.LENGTH_SHORT).show()
}
})
}

但回应不成功。我可以获取idCafe,但无法获取Table的数据。 请帮我解决这个问题。

这样用

@GET ("meja")
fun getTable(@Query("idCafe") idCafe: Int): Call<List<Table>>

您不必在 URL 中包含查询变量

当您使用@QueryRetrofit 将为您构建查询参数。无需在 URL 中指定它。

这意味着您应该像这样声明接口:

@GET ("meja")
fun getTable(@Query("idCafe") idCafe: String): Call<List<Table>>

然后,Retrofit 将使用注释中的名称 - idCafe - 并使用它构建参数。

您可以继续使用字符串,因为改造可以轻松处理它。但是,如果idCafe在您的应用程序中更好地建模为整数,那么我建议您改用Int

@GET ("meja")
fun getTable(@Query("idCafe") idCafe: Int): Call<List<Table>>

请注意,这只能因为 URL 中idCafe是一个整数。

像这样调用你的 API

@GET ("meja")
fun getTable(@Query("idCafe") idCafe: String): Call<TableResponse>

表响应调用将如下所示 -

class TableResponse {
@SerializedName("daftarMeja")
List<Table> list;
public List<Table> getList() {
return list;
}
public void setList(List<Table> list) {
this.list = list;
}
}

您不能在 api 调用中使用Call<List<Table>>作为结果,因为错误显示"BEGIN_ARRAY但已BEGIN_OBJECT">

最新更新