Почему в этом случае местоположение всегда равно нулю? - PullRequest
0 голосов
/ 21 апреля 2019

Может кто-нибудь сказать мне, почему, когда я вызываю функцию initPetrolStationList() в первом if состоянии currentLocation, всегда равно нулю, но когда я вызываю функцию, addPetrolStation(v: View) инициализируется? Мне бы хотелось, чтобы при вызове функции initPetrolStationList() currentLocation не было бы нулевым.

class PetrolStationListActivity : AppCompatActivity() {

    private lateinit var fusedLocationProviderClient: FusedLocationProviderClient
    private lateinit var listView: RecyclerView
    private var currentLocation: Location? = null

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
//some code
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.petrol_station_list_view)
        requestLocationPermission()
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)
        getLastLocation()
        initPetrolStationList()
    }


    fun addPetrolStation(v: View) {
        if (currentLocation != null) {
            val googleMapController = GoogleMapsController()
            googleMapController.getPetrolStationFromGoogle(object : GoogleResponse {
                override fun getLocation(): Location = currentLocation!!
                override fun getResponse(body: GoogleMapResponse) {
                    if (body.status == "OK") {
                        val intent = Intent(applicationContext, PetrolStationActivity::class.java)
                        v.context.startActivity(intent)
                    } else {
                        Toast.makeText(applicationContext, "Petrol station not found", Toast.LENGTH_LONG).show()
                    }
                }
            })
        }
    }

    @SuppressLint("MissingPermission")
    private fun getLastLocation() {
        fusedLocationProviderClient.lastLocation.addOnCompleteListener {
            if (it.isSuccessful) {
                currentLocation = it.result!!
                Log.d("Current location: ", "Lat:${currentLocation!!.latitude}, Lng:${currentLocation!!.longitude}")
            } else {
                Log.d("Location exception: ", it.exception?.message)
                Toast.makeText(this, "Location not found :( ", Toast.LENGTH_LONG).show()
            }
        }
    }

    private fun initPetrolStationList() {
        if (currentLocation != null) {
            val petrolStationController = PetrolStationController()
           //some code
        } else Toast.makeText(this, "Location not found", Toast.LENGTH_LONG).show()
    }

}

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019
  1. Попробуйте немедленно инициализировать petrolStationController
  2. Добавить fusedLocationProviderClient.lastLocation.addOnCompleteListener в onCreate
  3. И обновите данные petrolStationController в этом слушателе
0 голосов
/ 21 апреля 2019

Если вы позвоните initPetrolStationList изнутри getLastLocation после currentLocation = it.result!!, то currentLocation не будет нулевым.

...