Как настроить задачу Async из действия в Kotlin - PullRequest
0 голосов
/ 09 января 2019

У меня есть действие, которое вызывает класс и запускает функцию в этом классе следующим образом:

        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
    }

}

} * * тысяча двадцать-один

1 Ответ

0 голосов
/ 10 января 2019
    package www.binexmining.co.`in`.binexmining.binexmining.uam.view.activity

import android.app.Activity
import android.os.AsyncTask
import android.os.Bundle
import android.support.annotation.MainThread
import kotlinx.android.synthetic.main.row_referraluser.view.*
import www.binexmining.co.`in`.binexmining.R

class AsynTaskKotlinMain : Activity()
{

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_landing)
    }

    override fun onResume() {
        super.onResume()
        MyAssyn().execute("Pre-Executing Param Put here...","Param For Doinbackgroun")
    }

}

class  MyAssyn : AsyncTask<Any, Any, Any>()
{

    override fun onPreExecute() {
        super.onPreExecute()
    }

    override fun doInBackground(vararg params: Any?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onPostExecute(result: Any?) {
        super.onPostExecute(result)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...