尝试将位置坐标从列表视图传递到地图活动时发生错误

时间:2019-05-29 13:16:03

标签: android kotlin

我有一个列表视图,其中包含位置坐标(纬度,经度),并且我正尝试将其传递给地图活动以在地图上显示

这是在android studio和Kotlin上

listView.setOnItemClickListener { parent, view, position, id ->

        val time = usersList.get(position).time
        val long:String = usersList.get(position).long
        val late :String = usersList.get(position).late
startActivity(Intent(this, MapsActivity2::class.java).putExtra("long",long).putExtra("late",late))
}

class MapsActivity2 : AppCompatActivity(), OnMapReadyCallback {

private lateinit var mMap: GoogleMap

var long:String = intent.getStringExtra("long")
var late:String = intent.getStringExtra("late")


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_maps2)


    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    val mapFragment = supportFragmentManager
        .findFragmentById(R.id.map) as SupportMapFragment
    mapFragment.getMapAsync(this)
}


override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap

    // Add a marker in Sydney and move the camera
    val sydney = LatLng(long.toDouble(), late.toDouble())
    mMap.addMarker(MarkerOptions().position(sydney).title("jh"))
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
}
}
  

进程:com.example.firebase,PID:32463       java.lang.RuntimeException:无法实例化活动ComponentInfo {com.example.firebase / com.example.firebase.MapsActivity2}:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String android.content.Intent。 getStringExtra(java.lang.String)'上的空对象引用           在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3289)           在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3548)           在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)           在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)           在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)           在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2155)           在android.os.Handler.dispatchMessage(Handler.java:109)           在android.os.Looper.loop(Looper.java:207)           在android.app.ActivityThread.main(ActivityThread.java:7539)           在java.lang.reflect.Method.invoke(本机方法)           在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:524)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)        原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String android.content.Intent.getStringExtra(java.lang.String)'           在com.example.firebase.MapsActivity2。(MapsActivity2.kt:19)           在java.lang.Class.newInstance(本地方法)           在android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)           在android.support.v4.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)           在android.app.Instrumentation.newActivity(Instrumentation.java:1224)           在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3274)

4 个答案:

答案 0 :(得分:0)

var long:String = intent.getStringExtra("long")
var late:String = intent.getStringExtra("late")

以上代码应位于onCreate();

答案 1 :(得分:0)

无法在intent之前获得onCreate,因此请尝试将其放入onCreate中。这是因为Intent在final void attach(.....)

之前没有初始化
 lateinit var longStr : String 
 lateinit var late : String

 override onCreate(....) {
    longStr = intent.getStringExtra("long")
    late = intent.getStringExtra("late")
 }

答案 2 :(得分:0)

   include code inside onCreate() also check if it contain the extra
oncreate(){
if(getIntent.hasExtra("long")){
var long:String = intent.getStringExtra("long")
}
if(getIntent.hasExtra("late")){
var late:String = intent.getStringExtra("late")
}
}

答案 3 :(得分:0)

您可以在onCreate()之后获得意图价值,如下所示: 我还建议避免像long这样的预定义关键字,因为long被定义为数据类型

var long:String = intent.getStringExtra("long")
var late:String = intent.getStringExtra("late")