有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法打开Google地图活动。安卓

我试图从我的Android应用程序中打开谷歌地图活动,然后当我点击地图时,获取位置。 但我无法打开我的谷歌地图活动。 以下是我试图打开“活动”的代码:

    public class RegistrationActivity extends AppCompatActivity implements View.OnClickListener {
Button buttonPlaceBD,buttonCurrPlace;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_registration);
        buttonPlaceBD=(Button)findViewById(R.id.buttonPlaceBD);
        buttonPlaceBD.setOnClickListener(this);
        buttonCurrPlace=(Button)findViewById(R.id.buttonCurrPlace);
        buttonCurrPlace.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
Intent intent;
        switch (v.getId())
        {
            case R.id.buttonPlaceBD:
                intent=new Intent(this,BDMapsActivity.class);
                startActivity(intent);
                break;
            case R.id.buttonBack:
                finish();
                break;
        }


    }
}

这是我的BDMapsActivity。爪哇

public class BDMapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMapClickListener{

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bdmaps);
        mMap.setOnMapClickListener(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;   
    }

    @Override
    public void onMapClick(LatLng latLng) {
System.out.println("CLIIIIIIIIIICK: "+latLng);
    }
}

这是我的活动地图。xml

<fragment xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:map="http://schemas.安卓.com/apk/res-auto"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:id="@+id/map"
    安卓:name="com.google.安卓.gms.maps.SupportMapFragment"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    tools:context="com.example.serg_shapoval.astrologyes.BDMapsActivity" />

这给了我一个错误:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.serg_shapoval.astrologyes, PID: 18731 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.serg_shapoval.astrologyes/com.example.serg_shapoval.astrologyes.BDMapsActivity}: java.lang.NullPointerException at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2221) at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2280) at 安卓.app.ActivityThread.access$800(ActivityThread.java:141) at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1202) at 安卓.os.Handler.dispatchMessage(Handler.java:102) at 安卓.os.Looper.loop(Looper.java:136) at 安卓.app.ActivityThread.main(ActivityThread.java:5059) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.example.serg_shapoval.astrologyes.BDMapsActivity.onCreate(BDMapsActivity.java:22) at 安卓.app.Activity.performCreate(Activity.java:5312) at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178) at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2280)  at 安卓.app.ActivityThread.access$800(ActivityThread.java:141)  at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1202)  at 安卓.os.Handler.dispatchMessage(Handler.java:102)  at 安卓.os.Looper.loop(Looper.java:136)  at 安卓.app.ActivityThread.main(ActivityThread.java:5059)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:601)  at dalvik.system.NativeStart.main(Native Method) 


共 (1) 个答案

  1. # 1 楼答案

    在取消引用之前,需要等待mMap不为null并分配给有效引用

    此外,您还错过了对getMapAsync()的调用:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bdmaps);
    
        //Added:
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
    
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap; 
        mMap.setOnMapClickListener(this); //moved  
    }