我无法获得基于idCafe的数据库。
这是来自webservice的网址:
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,但无法获取表的数据。 请帮我解决这个问题。
答案 0 :(得分:0)
像这样使用
@GET ("meja")
fun getTable(@Query("idCafe") idCafe: Int): Call<List<Table>>
您不必在URL内包含?和查询变量。
答案 1 :(得分:0)
当您使用@Query
时,翻新将为您构建查询参数。无需在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
中是整数。
答案 2 :(得分:0)
像这样调用您的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”