Я получаю значение NULL в MyExistingComplain, когда я вхожу в него. Но это происходит только внутри метода onCreateDialog. Я хочу обновить макет этого диалога значениями объекта внутри MyExistingComplain.
Вот мой DialogFragment:
package com.example.atry.MakeComplaint
import Retrofit.INodeJS
import Retrofit.Observables
import Retrofit.RetrofitClient
import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.location.Address
import android.location.Geocoder
import android.net.Uri
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.DialogFragment
import com.example.atry.R
import com.squareup.picasso.Picasso
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.activity_signup.*
import retrofit2.Call
import retrofit2.Response
import java.io.File
import java.util.*
class PopupDialog : DialogFragment() {
lateinit var complaintIdView : TextView
lateinit var complaintTypeView : TextView
lateinit var complaintStatusView : TextView
lateinit var complaintDateView : TextView
lateinit var complaintLoctaionView : TextView
lateinit var complaintImageView : ImageView
lateinit var complaintDescriptionView : TextView
lateinit var imagePath: String
lateinit var address:String
lateinit var myAPI: INodeJS
val MyPREFERENCES = "MyPref"
//// to display exisiting complaint in dialog popup
var MyExistingComplain: Observables.Complaint?=null
fun sendExistingComplaintItem(complaint:Observables.Complaint){
this.MyExistingComplain = complaint
Log.d("MyExistingComplain outside onCreateDialog", MyExistingComplain.toString())
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
Log.d("MyExistingComplain inside onCreateDialog", MyExistingComplain.toString())
val builder = AlertDialog.Builder(activity)
val view = activity!!.layoutInflater.inflate(R.layout.existing_complaint_popup_inner, null, false)
complaintIdView = view.findViewById<TextView>(R.id.complainNumber)
complaintTypeView = view.findViewById<TextView>(R.id.complaintype)
complaintStatusView = view.findViewById<TextView>(R.id.complainStatus)
complaintDateView = view.findViewById<TextView>(R.id.complaindate)
complaintLoctaionView = view.findViewById<TextView>(R.id.complainLocation)
complaintImageView = view.findViewById<ImageView>(R.id.complainImage)
complaintDescriptionView = view.findViewById<TextView>(R.id.complainDescription)
complaintIdView.text = MyExistingComplain!!.id.toString()
complaintTypeView.text = MyExistingComplain!!.ComplaintType.typeName
complaintStatusView.text = MyExistingComplain!!.Status.statusType
// complaintDateView.text = MyExistingComplain.
complaintLoctaionView.text = address
complaintDescriptionView.text = MyExistingComplain!!.description
this.address = getlocation(MyExistingComplain!!.Location.longitude, MyExistingComplain!!.Location.latitude)
imagePath = MyExistingComplain!!.image
val dl = File(imagePath)
Log.d("file", dl.toString())
if(!dl.exists()){
Log.d("ddd1", "not exist")
}
// Picasso.get().load("http://192.168.0.107:3001" + dl).into(complaintImageView)
//Picasso.get().load(File(imagePath)).into(myImage)
builder.setView(view)
val yes = view.findViewById(R.id.YES) as Button
val no = view.findViewById(R.id.NO) as Button
// set onclicklistener
yes.setOnClickListener(View.OnClickListener {
// I want the dialog to close at this point
increment()
dismiss()
})
// set onclicklistener
no.setOnClickListener(View.OnClickListener {
// I want the dialog to close at this point
dismiss()
descriptionFragment()
})
return builder.create()
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return super.onCreateView(inflater, container, savedInstanceState)
Log.d("2 IT IS HERE NOW!!", MyExistingComplain.toString())
}
private fun backFragment() {
val manager = (context as AppCompatActivity).supportFragmentManager
manager.popBackStackImmediate()
}
private fun descriptionFragment() {
val dFragment= Category_Description()
val lFragment = LocationFragment()
val manager = (context as AppCompatActivity).supportFragmentManager
val transaction = manager.beginTransaction()
transaction.replace(
R.id.location_screen,
dFragment
) // give your fragment container id in first parameter
transaction.show(dFragment)
transaction.hide(lFragment)
transaction.isAddToBackStackAllowed
transaction.addToBackStack(lFragment.fragmentManager.toString()) // if written, this transaction will be added to backstack
transaction.commit()
}
private fun getlocation(longitude: String, latitude: String): String {
val long = longitude.toDouble()
val lat = latitude.toDouble()
val geocoder: Geocoder
val addresses: List<Address>
geocoder = Geocoder(activity, Locale.getDefault())
addresses = geocoder.getFromLocation(
long,
lat,
1
) // Here 1 represent max location result to returned, by documents it recommended 1 to 5
val address =
addresses[0].getAddressLine(0) // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
// val city = addresses[0].getLocality()
// val state = addresses[0].getAdminArea()
// val country = addresses[0].getCountryName()
// val postalCode = addresses[0].getPostalCode()
// val knownName = addresses[0].getFeatureName()
Log.d("address", address)
// Log.d("address", city)
// Log.d("address", knownName)
return address
}
private fun increment(){
//INIT API
val retrofit = RetrofitClient.instance
myAPI = retrofit.create(INodeJS::class.java)
val ComplainId= MyExistingComplain!!.id
val preferences = this.activity!!.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE)
val e =preferences!!.getString("accessToken", "nonono")
val call = myAPI.increasePriority(ComplainId, e)
call.enqueue(object : retrofit2.Callback<String> {
override fun onFailure(call: Call<String>?, t: Throwable?) {
Log.d("NO increment", t!!.message)
}
override fun onResponse(call: Call<String>?, response: Response<String>?) {
// Toast.makeText(this@ComplainFragment, "sucess", Toast.LENGTH_SHORT).show()
if(response!!.code() == 200) {
Log.d("Increment done", "200")
Log.d("response", response.body().toString())
backFragment()
}
else if(response!!.code() == 201){
Log.d("Increment done already", "201")
Log.d("response", response.body().toString())
alreadyDonePopup()
}
}
})
// compositeDisposable.add(myAPI.increasePriority(ComplainId)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe({ message ->
// if (message.contains("registered")) {
//
// launchHomeActivity()
// } else
// Toast.makeText(
// this@SignupActivity,
// "Error NOT REGISTERED",
// Toast.LENGTH_SHORT
// ).show()
//
// },{ Throwable ->
// if(!Throwable.toString().contains("500")){
// Toast.makeText(
// this@SignupActivity,
// "Error NOT registered 1",
// Toast.LENGTH_SHORT
// ).show()
// }
//
// }))
}
//opening up the AlreadyMadeComplaintPopup
private fun alreadyDonePopup(){
val fm = activity!!.supportFragmentManager
val dialog = AlreadyMadeComplaintPopup() // creating new object
dialog.show(fm, "dialog")
}
}
Я попытался зарегистрировать свой объект внутри и снаружи метода onCreateDialog, и вот результаты. Кто-нибудь может мне помочь? Я искал inte rnet в течение нескольких часов и до сих пор не знаю, почему я получаю нулевой объект внутри метода onCreateDialog.
Это то, что я получаю в журнале:
D/MyExistingComplain outside onCreateDialog: Complaint(id=1, description=sewerage problem!!!!, image=null, Location=Location(longitude=somevalue, latitude=somevalue), ComplaintType=ComplaintType(typeName=Sewerage, image=null), Status=Status(id=0, statusType=Unresolved))
D/MyExistingComplain inside onCreateDialog: null