【问题标题】:Can't open Google Maps Activity. Android无法打开 Google 地图活动。安卓
【发布时间】:2016-08-13 20:02:34
【问题描述】:

我正在尝试从我的 Android 应用程序打开 Google 地图活动,然后当我单击地图时,获取位置。 但我无法打开我的 Google 地图活动。 这是我试图打开 Activity 的代码:

    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.java

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);
    }
}

这是我的 activity_bdmaps.xml

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

它给了我一个错误:

E/AndroidRuntime: 致命异常: main 进程:com.example.serg_shapoval.astrologyes,PID:18731 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.serg_shapoval.astrologyes/com.example.serg_shapoval.astrologyes.BDMapsActivity}:java.lang.NullPointerException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2221) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2280) 在 android.app.ActivityThread.access$800(ActivityThread.java:141) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1202) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5059) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 com.example.serg_shapoval.astrologyes.BDMapsActivity.onCreate(BDMapsActivity.java:22) 在 android.app.Activity.performCreate(Activity.java:5312) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2280) 在 android.app.ActivityThread.access$800(ActivityThread.java:141) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1202) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5059) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 在 dalvik.system.NativeStart.main(本机方法)

【问题讨论】:

  • 移动 mMap.setOnMapClickListener(this);一直到 onMapReady()
  • @DanielNugent,感谢您的回答。它加载了我的谷歌地图活动,但它在 MapClick 方法上不起作用!
  • 您还需要获取 SupportMapFragment 并致电supportMapFragment.getMapAync(this);
  • @DanielNugent,谢谢!它有效

标签: java android google-maps android-studio


【解决方案1】:

您需要等到mMap 不为空并分配给一个有效的引用,然后才能取消引用它。

另外,您错过了对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  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    相关资源
    最近更新 更多