SupportfragmentManager становится null android kotlin

Я пытаюсь запустить dialogFragment из onPostExecute, но поддержкаFragmentManager по какой-то причине возвращает null. Я попытался запустить dialogFragment из основного действия и других фрагментов, и он отлично работает, но я не могу запустить его из AsyncTask. Вот AsyncTask: –

class SubscribeTask: AsyncTask<Void, Void, Void> { var mContext: Context var mTextView_temp: TextView var mTextView_humidity: TextView var mWeather_image: ImageView var mMessage: JsonObject var mResult = JsonObject() var mTemp: String = "" var mHumidity: String = "" var mLdr: Boolean = true var mRain: Boolean = false var mWeather: Int = 0 var tester: Boolean = false var mFire: Boolean = false constructor(context: Context, textView_temp: TextView, textView_humidity: TextView, weather_image: ImageView, message: PNMessageResult){ mContext = context mMessage = message.message.asJsonObject mTextView_temp = textView_temp mTextView_humidity = textView_humidity mWeather_image = weather_image } override fun doInBackground(vararg p0: Void?): Void? { if (mMessage.has("pi")){ mResult = mMessage.getAsJsonObject("pi") mTemp = mResult.get("temp").asString mHumidity = mResult.get("humidity").asString mLdr = mResult.get("ldr").asBoolean mRain = mResult.get("rain").asBoolean mFire = mResult.get("fire").asBoolean tester = true if(mRain){ mWeather = R.drawable.rainy }else if(mLdr){ mWeather = R.drawable.suny }else{ mWeather = R.drawable.cloudyy } } return null } override fun onPostExecute(result: Void?) { if(tester) { mTextView_temp.text = mTemp mTextView_humidity.text = mHumidity mWeather_image.setImageResource(mWeather) if(mFire){ MainActivity().showAlertDialog("Fire", "There might be a fire in the house", R.drawable.house_fire, "Stop Alarm") } } } } 

Вот функция showAlertDialog (): –

 fun showAlertDialog(title: String, content: String, imageid: Int, button: String){ val fm = supportFragmentManager val alertDialogFragment = AlertFragment(title, content, imageid, button).newInstance(title, content, imageid, button) alertDialogFragment.show(fm, "fragment_alert") } 

Вот диалоговое окно: –

 class AlertFragment(val mTitle: String, val mContent: String, val mImageId: Int, val mButton: String) : DialogFragment() { fun newInstance(title: String, content: String, imageid: Int, button: String): AlertFragment { val alertfrag = AlertFragment(title, content, imageid, button) val args = Bundle() args.putString("title", title) alertfrag.arguments = args return alertfrag } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment return inflater!!.inflate(R.layout.fragment_alert, container, false) } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) title.text = mTitle alertContent.text = mContent alertImageId.setImageResource(mImageId) alertButton.text = mButton } } 

Может кто-то, пожалуйста, помогите мне. Ответы на Java тоже в порядке.

Для этого вы можете использовать шаблон наблюдателя.

Создайте такой интерфейс

 interface myExecListener { fun onFinish(title: String, content: String, imageid: Int, button: String) } 

Добавьте эти строки в SubscribeTask

 class SubscribeTask: AsyncTask<Void, Void, Void>() { var listener: myExecListener? = null fun exec(listener: myExecListener){ this.listener = listener this.execute() } override fun doInBackground(vararg params: Void?): Void? { return null } override fun onPostExecute(result: Void?) { super.onPostExecute(result) listener?.onFinish("Fire", "There might be a fire in the house", 333, "Stop Alarm") } } 

И выполните в своей деятельности

 SubscribeTask().exec(object : myExecListener{ override fun onFinish(title: String, content: String, imageid: Int, button: String) { println("Observer triggered") showAlertDialog(title, content, imageid, button) } }) 

В вашей функции postExecute вас есть следующий код:

 MainActivity().showAlertDialog(...) 

Это создает новый объект активности, который определенно не является тем, что нужно сделать. Поскольку этот объект вновь создан и не был правильно инициализирован андроидом, внутренние объекты, такие как supportFragmentManager, не инициализируются, в результате чего вы видите null .

Intereting Posts
Связывание слушателя; Не удается найти сеттер Может ли Kotlin разрешить функцию, возвращающую значение типа реализации этого интерфейса? ViewPager показывает Textviews из первого фрагмента неразрешенная ссылка: запуск Веб-программирование Kotlin без использования Intelli-J Ultimate? Оборонительная копия изменчивой коллекции в классе данных Kotlin Скрипт Kotlin как параметры конфигурации Gradle, не использующие расширение Запросы Firebase никогда не заканчиваются на Android Kotlin Cast String как String.Companion Как я могу квадратировать каждый элемент целочисленного массива в Kotlin Свойства расширения Kotlin, не распознанные в V1.0.1 Подключение к топливу Kotlin использует утверждения времени выполнения для проверки нуля – служебные накладные расходы? Изменить текучесть <Список <Obj1 >> в текущую <Список <Obj2 >> в комнате Точка останова не попадает внутрь обратного вызова Kotlin в Intellij