[英]Retrofit Call.enqueue method not being called - kotlin
我能够使用 Retrofit2 在测试项目中进行编辑和删除工作,但现在我需要在我的真实项目中使用它,尽管使用的代码和网络服务(使用 Slim 4 和 Notorm 创建)是相同的,但编辑并且 Delete 由于某种原因开始不起作用(get 和 Post 都可以正常工作)
对于这两个编辑,我使用的页面从数据库中获取所有日期并将其放入某些视图中,然后我单击具有编辑 Function 的按钮。我尝试调试并且一切正常,直到它尝试输入call.enqueue 方法,它失败了,没有在我的 logcat 上给出任何错误。 我在我的 onResponse 上敬酒,在我的 OnFailure 上敬酒,但都没有显示在我的屏幕上。
对于 Delete 情况类似我有一个页面,有一个 call.enqueue(在 on.create 上)获取视图中出现的所有数据,然后是一个触发 delete 方法的按钮,这里还有调用.enqueue 不起作用。 我测试了这个,没有在 oncreate 上调用 call.enqueue,但它发生了同样的事情。
这是我的编辑按钮代码
fun editar(view: View) {
val request = ServiceBuilder.buildService(EndPoints::class.java)
val latitude = latitude.text.toString().toDouble()
val longitude = longitude.text.toString().toDouble()
val morada = editMoradaView.text.toString()
val n_quartos = editNQuartosView.text.toString().toInt()
val casaBanho = casaBanho.text.toString().toInt()
val contacto = contacto.text.toString()
val mobilada = mobilada.text.toString()
val preco = preco.text.toString().toDouble()
val observacao = observacao.text.toString()
val utilizador_id = shared_preferences.getInt("id", 0)
if (isBitMap) {
val base = getBase64String(decodedByte)
fotografia = base
} else {
fotografia = base64
}
val call = request.editar(
id = ID,
users_id = utilizador_id,
morada = morada,
n_quartos = n_quartos,
latitude = latitude.toString().toDouble(),
longitude = longitude.toString().toDouble(),
fotografia = fotografia,
preco = preco,
ncasas_banho = casaBanho,
telemovel = contacto,
mobilado = mobilada,
outros_atributos = observacao
)
call.enqueue(object : Callback<OutputEditar> {
override fun onResponse(call: Call<OutputEditar>, response: Response<OutputEditar>) {
if (response.isSuccessful) {
val c: OutputEditar = response.body()!!
Toast.makeText(this@EditarAnuncios, c.MSG, Toast.LENGTH_LONG).show()
val intent = Intent(this@EditarAnuncios, MapsActivity::class.java)
startActivity(intent)
finish()
}
}
override fun onFailure(call: Call<OutputEditar>, t: Throwable) {
Toast.makeText(this@EditarAnuncios, "${t.message}", Toast.LENGTH_SHORT).show()
}
})
}
这是我的删除按钮代码
fun delete(view: View) {
var id = intent.getStringExtra("PARAM_ID")
var idString = id.toString()
val request = ServiceBuilder.buildService(EndPoints::class.java)
val call = request.apagarAnuncio(id = idString.toInt())
call.enqueue(object : Callback<OutputApagar> {
override fun onResponse(call: Call<OutputApagar>, response: Response<OutputApagar>) {
if (response.isSuccessful) {
val c: OutputApagar = response.body()!!
Toast.makeText(this@DetalhesAnuncioLogado, c.MSG, Toast.LENGTH_LONG).show()
val intent = Intent(this@DetalhesAnuncioLogado, MapsActivity::class.java)
setResult(Activity.RESULT_OK, intent)
finish()
}
}
override fun onFailure(call: Call<OutputApagar>, t: Throwable) {
Toast.makeText(this@DetalhesAnuncioLogado, "${t.message}", Toast.LENGTH_SHORT)
.show()
}
})
}
这是我的 2 个数据类(在单独的文件中)
data class OutputEditar(
val users_id: Int,
val morada: String,
val n_quartos: Int,
val latitude: Double,
val longitude: Double,
val fotografia: String,
val preco: Double,
val ncasas_banho: Int,
val telemovel: String,
val mobilado: String,
val outros_atributos: String,
val status: String,
val MSG: String
)
data class OutputApagar(
val status: String,
val MSG: String
)
这是我的终点
@FormUrlEncoded
@POST("/editar_anuncios/{id}")
fun editar(@Path("id") id: Int?,
@Field("users_id") users_id: Int?,
@Field("morada") morada: String?,
@Field("n_quartos") n_quartos: Int?,
@Field("latitude") latitude: Double?,
@Field("longitude") longitude: Double?,
@Field("fotografia") fotografia: String?,
@Field("preco") preco: Double?,
@Field("ncasas_banho") ncasas_banho: Int?,
@Field("telemovel") telemovel: String?,
@Field("mobilado") mobilado: String?,
@Field("outros_atributos") outros_atributos: String?): Call<OutputEditar>
@POST("/apagarAnuncios/{id}")
fun apagarAnuncio(@Path("id") id: Int?): Call<OutputApagar>
这两个端点在我的测试项目和 Postman 上都运行良好
我的服务生成器
object ServiceBuilder {
private val client = OkHttpClient.Builder().build()
private val retrofit = Retrofit.Builder()
.baseUrl("https://tneveda.000webhostapp.com/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
fun<T> buildService(service: Class<T>): T {
return retrofit.create(service)
}
}
先感谢您
那一刻,当我提出这个问题的 10 分钟后,我发现了我的问题。 忘记在我的真实项目上更新我的端点,这就是它不起作用的原因
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.