运行时异常:无法实例化活动ComponentInfo

时间:2018-07-11 21:11:18

标签: android google-maps-api-3 geocoder

我试图从Google地图上的指定位置获取地址,并得到此错误:

  

Blockquote   致命异常:主要                     流程:elder.msu.testlocationapp,PID:23559                     java.lang.RuntimeException:无法实例化活动ComponentInfo {elder.msu.testlocationapp / elder.msu.testlocationapp.MapsActivity}:java.lang.NullPointerException:尝试从字段'double com.google.android.gms.maps中读取。对空对象引用的model.LatLng.latitude'                         在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2366)                         在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2515)                         在android.app.ActivityThread.access $ 1000(ActivityThread.java:154)                         在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1379)                         在android.os.Handler.dispatchMessage(Handler.java:102)                         在android.os.Looper.loop(Looper.java:157)                         在android.app.ActivityThread.main(ActivityThread.java:5571)                         在java.lang.reflect.Method.invoke(本机方法)                         在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:745)                         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)                      原因:java.lang.NullPointerException:尝试从null对象引用上的字段“ double com.google.android.gms.maps.model.LatLng.latitude”读取                         在elder.msu.testlocationapp.MapsActivity(MapsActivity.java:32)                         在java.lang.Class.newInstance(本地方法)                         在android.app.Instrumentation.newActivity(Instrumentation.java:1068)                         在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2356)                         在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2515)                         在android.app.ActivityThread.access $ 1000(ActivityThread.java:154)                         在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1379)                         在android.os.Handler.dispatchMessage(Handler.java:102)                         在android.os.Looper.loop(Looper.java:157)                         在android.app.ActivityThread.main(ActivityThread.java:5571)                         在java.lang.reflect.Method.invoke(本机方法)                         在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:745)                         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)

我清单上的所有必需品。 这是我的地图活动代码

public void onMapReady(GoogleMap googleMap) {
    mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latLng) {
            markerOptions.position(latLng);
            markerOptions.title(latLng.latitude + " : " + latLng.longitude);
            mMap.clear();
            mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
            mMap.addMarker(markerOptions);
        }
    });

private void getAddress(){

    Geocoder geocoder;
    final List<Address> addresses;
    geocoder = new Geocoder(this, Locale.getDefault());
    try{
        addresses = geocoder.getFromLocation(latitude,longitude,1);

        if (addresses!=null && addresses.size() > 0){
            address = addresses.get(0).getAddressLine(0);
            city = addresses.get(0).getLocality();
        }

    }catch (IOException e){
        e.printStackTrace();
        Toast.makeText(getApplicationContext(), "Cannot get data", Toast.LENGTH_SHORT).show();
    }


    btnOK.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getAddress();
            confirmData(address, city);

        }
    });


}

private void confirmData(String address, String city) {

    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    Bundle bundle = new Bundle();
    intent.putExtra("data", bundle);
    intent.putExtra("address", address);
    intent.putExtra("city", city);
    startActivity(intent);
    finish();
}

1 个答案:

答案 0 :(得分:0)

要停止此错误,只需包装地图单击侦听器代码。

if (latLng != null) {
    markerOptions.position(latLng);
    markerOptions.title(latLng.latitude + " : " + latLng.longitude);
    mMap.clear();
    mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
    mMap.addMarker(markerOptions);
}

至于为什么它给出一个空值,我不确定。活动首次开始时在onCreate期间会发生这种情况吗?