Изменение фрагмента get IllegalStateException не должно быть равно нулю в kotlin - PullRequest
1 голос
/ 21 февраля 2020

Привет. Я получаю некоторую информацию из Интернета с сопрограммами в моей программе. Когда информация поступает, я изменяю фрагмент. В этом случае программа вылетает, и ошибка Null принимает следующие параметры

progress.isIndeterminate = false
adapter = CircularAdapter(itemsData, this@CircularFragment)
rc.adapter = adapter
adapter.notifyDataSetChanged()
swipe_refresh.visibility = View.VISIBLE
lyt_progress.visibility = View.GONE
swipe_refresh.isRefreshing = false

Это мой код Я даже отменяю работу в OnDestroyView, но все равно получаю ошибку

 private var job: Job = Job()
    override val coroutineContext: CoroutineContext
        get() = Dispatchers.Main + job
    launch {
                val operation = async(Dispatchers.IO) {
                   try {
                       ...
                       for (myTable in table) {
                           val rows: Elements = myTable.select("tr")
                           activity?.runOnUiThread{
                               progress.isIndeterminate = false
                           }
                           for (i in 1 until rows.size) {
                               progress.progress = i                               
                               itemsData.add(...)

                           }
                       }
                   }catch (e: Exception){
                       activity?.runOnUiThread{
                           val navController = Navigation.findNavController(activity!!, R.id.nav_host_fragment)
                           navController.navigate(R.id.noVPNFragment)
                       }
                   }
                }
                operation.await() // wait for result of I/O operation without blocking the main thread

                // update views
                activity?.runOnUiThread{
                    adapter = CircularAdapter(itemsData, this@CircularFragment)
                    rc.adapter = adapter
                    adapter.notifyDataSetChanged()
                    swipe_refresh.visibility = View.VISIBLE
                    lyt_progress.visibility = View.GONE
                    swipe_refresh.isRefreshing = false
                }
            }

    override fun onDestroy() {
            super.onDestroy()
            job.cancel()
        }

        override fun onDestroyView() {
            super.onDestroyView()
            job.cancel()
        }

ОБНОВЛЕНИЕ: logcat:

02-21 12:52:48.268 16218-16218/ir.mahdi.circulars.test E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ir.mahdi.circulars.test, PID: 16218
    java.lang.IllegalStateException: progress must not be null
        at ir.mahdi.circulars.Fragments.CircularFragment$getCirculars$1$operation$1$1.run(CircularFragment.kt:118)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

1 Ответ

0 голосов
/ 21 февраля 2020

Из вашей трассировки стека кажется, что progress.isIndeterminate = false является причиной ошибки. Похоже, progress не был инициализирован. Может быть, вы забыли findViewById() или что-либо, что вы используете для привязки вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...