【发布时间】:2021-12-06 04:22:31
【问题描述】:
对于我正在制作的应用,我需要获取用户的位置,然后将其显示在地图上。
为了实现这一点,我在下面的代码中使用了 LocationServices.getFusedLocationProviderClient()。
当我在 addOnSuccessListener 中获取位置值时,纬度和经度值由于某种原因为空,所以我得到了 NullPointerException:
import android.Manifest
import android.annotation.SuppressLint
import android.location.Location
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.realtomjoney.mapsapp.databinding.ActivityMainBinding
import java.lang.NullPointerException
class MainActivity : AppCompatActivity(), OnMapReadyCallback {
private lateinit var binding: ActivityMainBinding
lateinit var myMap: GoogleMap
lateinit var fusedLocation: FusedLocationProviderClient
@SuppressLint("MissingPermission")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
ActivityCompat.requestPermissions(this, arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION) , 100)
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
binding.button2.setOnClickListener {
fusedLocation = LocationServices.getFusedLocationProviderClient(this)
fusedLocation.lastLocation.addOnSuccessListener { location: Location? ->
val latLong = LatLng(location!!.latitude, location.longitude)
myMap.addMarker(MarkerOptions().position(latLong).title("Found Location"))
myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLong, 10f))
}
}
}
override fun onMapReady(p0: GoogleMap) {
myMap = p0
}
}
当我运行应用程序时,出现以下异常:
2021-10-19 16:46:09.859 8556-8556/com.realtomjoney.mapsapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.realtomjoney.mapsapp, PID: 8556
java.lang.NullPointerException
at com.realtomjoney.mapsapp.MainActivity.onCreate$lambda-1$lambda-0(MainActivity.kt:46)
at com.realtomjoney.mapsapp.MainActivity.$r8$lambda$wwcxhtPyugLtHLn65vCEt3JY33Q(Unknown Source:0)
at com.realtomjoney.mapsapp.MainActivity$$ExternalSyntheticLambda1.onSuccess(Unknown Source:4)
at com.google.android.gms.tasks.zzn.run(com.google.android.gms:play-services-tasks@@17.2.0:4)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7842)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
是的,当我第一次运行该应用程序时,我已同意所有权限。
如果这个问题写得不好或重复,请告诉我,因为我正在努力创建良好且结构良好的问题。
【问题讨论】:
标签: android google-maps kotlin