Я разработал приложение для Android с использованием Kotlin, и все его структура и функциональность завершены, но я заметил небольшую проблему, когда я нажимаю быстро, по крайней мере, дважды на кнопку, которая выполняет вызов API.
Длявызовы API Я использую комбинацию RetroFit2 и GsonConverterFactory.Вызов выглядит следующим образом:
fun fetchInfo(id: Int) {
val retrofit = Retrofit.Builder()
.baseUrl("https://www.mysitesurl.com/api/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(ApiService::class.java)
api.getInfo(id).enqueue(object: Callback<DataType> {
override fun onResponse(call: Call<DataType>, response: Response<DataType>) {
var resp = response.body()!!
my_image.setImageResource(resources.getIdentifier(resp.image, "drawable", context!!.packageName))
my_image.visibility = View.VISIBLE
my_label.text = resp.text
my_label.visibility = View.VISIBLE
}
override fun onFailure(call: Call<FechaDia>, t: Throwable) {
}
})
}
Я немного отредактировал код, чтобы избежать определенных имен переменных
Так что, как уже упоминалось, этот код работает нормально,проблема возникает, когда я нажимаю кнопку навигации дважды быстро.Из того, что я понимаю, он пытается сделать еще один вызов API, прежде чем текущий ответит и получает нулевой ответ, поэтому я в основном пытаюсь заменить изображение нулевым ресурсом, и он показывает мне эту ошибку:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference`
Я попытался использовать try / catch, но он все еще делает вызов и все еще получает пустой запрос.Есть ли способ предотвратить это или что я здесь упускаю в своем процессе?
Основная проблема заключается в том, что не просто отображается ошибка, приложение закрывается и отображается сообщение App has stopped. Open app again
.