Ich versuche, eine DialogFragment von OnPostExecute zu starten, aber der supportFragmentManager gibt aus irgendeinem Grund null zurück. Ich habe versucht, das dialogFragment aus Hauptaktivität und anderen Fragmenten zu starten, und es funktioniert perfekt, aber ich kann es nicht von AsyncTask starten. Hier ist die AsyncTask: -SupportfragmentManager wird null android kotlin
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")
}
}
}
}
hier die showAlertDialog ist() Funktion: -
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")
}
Hier ist die dialogFragment: -
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
}
}
Kann mir bitte jemand helfen. Antworten in Java sind auch in Ordnung.
Also, was soll ich tun? –
Im Allgemeinen speichern Benutzer eine 'WeakReference' der übergeordneten Aktivität in der' AsyncTask' und greifen dann auf diese Referenz in 'postExecute' zu, wenn sie etwas für die Aktivität aufrufen müssen. – Kiskae
können Sie irgendein Beispiel oder Code geben, denn ich bin ein Noob –