Назад к задачам
Яндекс PayПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
7
Исправление багов во View‑фрагменте, потоках и работе с LocationManager
Компании, где спрашивали:
Условие задачи
Найдите и исправьте ошибки в следующем коде фрагмента на Kotlin. Программа должна показывать количество нажатий, менять текст кнопки и после достижения нужного количества запускать запрос к LocationManager из отдельного потока, однако в текущей реализации нарушены правила жизненного цикла фрагмента и работы с потоками. Предоставьте исправленную версию.
class Frmt(var targetCount: Int) : Fragment() {
private val contextRef = requireContext()
private val textView: TextView = requireView().findViewById(R.id.tv)
private val button: Button = requireView().findViewById(R.id.btn)
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.asdasd, container, true)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
var clicks = 0
textView.text = "Для подтверждения операции нажмите далее $targetCount раз"
button.text = "Нажать"
button.setOnClickListener {
if (clicks < targetCount) {
clicks += 1
} else {
Thread {
(contextRef.getSystemService(Context.LOCATION_SERVICE) as LocationManager)
.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
500,
500f
) {
val result = executeRequest(
it.latitude,
it.longitude
)
Handler().post {
if (result) {
textView.text = "Операция произведена успешно"
} else {
throw Exception("Операция произведена с ошибкой, повторите позже")
}
}
}
}
}
}
}
}