У меня есть действие, которое вызывает класс и запускает функцию в этом классе следующим образом:
for (i in 0 until questions) {
droll.droolCalls(sign)
}
Иногда это может выполняться вечно, так как оно должно генерировать кучу случайных чисел, поэтому я хочу, чтобы он мог работать в фоновом режиме. Я написал AsyncTask, который выглядит так:
class MyAsync(
private val droll: CreateLayout,
private val questions: Int, private val sign:Int,
var progressBar: ProgressBar,
var layoutProgress: LinearLayout,
var layoutMain: LinearLayout
) :
AsyncTask<String, Int, CreateLayout>() {
var progress = 0
override fun doInBackground(vararg params: String?): CreateLayout {
for (i in 0 until questions) {
droll.droolCalls(sign)
}
return droll
}
override fun onProgressUpdate(vararg values: Int?) {
super.onProgressUpdate(*values)
progressBar.incrementProgressBy(progress * 10)
}
override fun onPostExecute(result: CreateLayout?) {
super.onPostExecute(result)
layoutProgress.visibility = View.GONE
layoutMain.visibility = View.VISIBLE
}
}
Однако, когда я вызываю drollclass
MyAsync(droll, totalQuestions,sign, progressBar, Loading, mainLayout).execute("hello")
Я получаю сообщение об ошибке от других функций, требующих запуска drool.
это например insert_point.addView(droll.makeTextView(numberOfQuestions - 1))
дает мне ошибку java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
, потому что insert_point не получает данные из droll, потому что Async не запускался? однако, если я возьму его из цикла Async для нашего Async, он будет работать нормально.
вся структура выглядит примерно так
class mainclass{
MyAsync(droll, totalQuestions,sign, progressBar, Loading, mainLayout).execute("hello")
insert_point.addView(droll.makeTextView(numberOfQuestions - 1))
class MyAsync(
private val droll: CreateLayout,
private val questions: Int, private val sign:Int,
var progressBar: ProgressBar,
var layoutProgress: LinearLayout,
var layoutMain: LinearLayout
) :
AsyncTask<String, Int, CreateLayout>() {
var progress = 0
override fun doInBackground(vararg params: String?): CreateLayout {
for (i in 0 until questions) {
droll.droolCalls(sign)
}
return droll
}
override fun onProgressUpdate(vararg values: Int?) {
super.onProgressUpdate(*values)
progressBar.incrementProgressBy(progress * 10)
}
override fun onPostExecute(result: CreateLayout?) {
super.onPostExecute(result)
layoutProgress.visibility = View.GONE
layoutMain.visibility = View.VISIBLE
}
}
} * * тысяча двадцать-один