-1

i have a list view contains the locations coordinate (late,long) and i'm trying to pass them to a map activity to show it on map

this is on android studio and 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))
}
}

Process: com.example.firebase, PID: 32463 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.firebase/com.example.firebase.MapsActivity2}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3289) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3548) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2155) at android.os.Handler.dispatchMessage(Handler.java:109) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:7539) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference at com.example.firebase.MapsActivity2.(MapsActivity2.kt:19) at java.lang.Class.newInstance(Native Method) at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69) at android.support.v4.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43) at android.app.Instrumentation.newActivity(Instrumentation.java:1224) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3274)

Pratik Butani
  • 60,504
  • 58
  • 273
  • 437

3 Answers3

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

Above code should be in onCreate();

Vir Rajpurohit
  • 1,869
  • 1
  • 10
  • 23
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")
}
}
akshay_shahane
  • 4,423
  • 2
  • 17
  • 30
0

you can get intent valeu after onCreate() like this way : i would also suggest to avoid predefined keyword like long, because long is defined as a datatype

var long:String = intent.getStringExtra("long")
var late:String = intent.getStringExtra("late")
Mitesh Machhoya
  • 404
  • 2
  • 8