繁体   English   中英

Retrofit 未调用 Call.enqueue 方法 - kotlin

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM