MapView 黑屏但 Android 中没有错误

MapView black screen but no errors in Android

我正在尝试使用 MapView 显示位置,但无法正常工作。 我已经查看了所有其他有相同问题的线程,但解决方案对我不起作用。

以下是应该有效但无效的方法:

    public void displayMap(){
    final MapView mapView = findViewById(R.id.locationMapView);
    mapView.getMapAsync(new OnMapReadyCallback() {

        @Override
        public void onMapReady(GoogleMap googleMap) {
            LatLng coordinates = new LatLng(14.0583, 108.2772); //for testing
            googleMap.addMarker(new MarkerOptions().position(coordinates).title("Test"));
            googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(coordinates, 15));
        }
    });
}

我是 Android Studio 的新手,只是尝试一下。 我也已经尝试理解 reference/documentation 但它没有多大帮助,因为我不知道从哪里开始。

如果有人向我解释错误,我将不胜感激。 当然,如果我遗漏了您需要的重要信息,我会为您获取。

编辑1:

这是logcat

https://pastebin.com/qMKzsQQS

欢迎使用 Whosebug!

我认为可能的陷阱是您需要在 Fragment/Activity:

中调用 mapView.onResume(bundle)mapView.onPause()
@Override
public void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance)
    mapView.onCreate(savedInstance)
}


@Override
public void onStart() {
    super.onStart();
    mapView.onStart();
}

@Override
public void onResume() {
    super.onResume();
    mapView.onResume();
}

@Override
public void onPause() {
    super.onPause();
    mapView.onPause();
}

@Override
public void onStop() {
    super.onStop();
    mapView.onStop();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    mapView.onLowMemory();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mapView.onDestroy();
}

您可以在 MapView's documentation 中阅读它。

另请参阅日志。您可能会看到来自 Google Maps SDK 的一些关于错误的 API 键或相关的警告。

您的 API 密钥未启用,visit this site 了解如何获得 api 密钥

我不再尝试将其实现为 MapView 并切换到 MapAcitvity。 实现起来似乎更容易,只需在 Android Studio

中创建 "new-> Google-> Map Activity"

我认为我的方法的问题在于我不知道将 api 键放在哪里。 虽然它没有抛出关于这个的错误...

编辑:

这是解决方案/我如何让它工作的示例:

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

private GoogleMap mMap;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MapView mMap = findViewById(R.id.map);
    mMap.onCreate(savedInstanceState);
    mMap.getMapAsync(this);
}

@Override
public void onStart() {
    MapView mMap = findViewById(R.id.map);
    super.onStart();
    mMap.onStart();
}

@Override
public void onResume() {
    MapView mMap = findViewById(R.id.map);
    super.onResume();
    mMap.onResume();
}

@Override
public void onPause() {
    MapView mMap = findViewById(R.id.map);
    super.onPause();
    mMap.onPause();
}

@Override
public void onStop() {
    MapView mMap = findViewById(R.id.map);
    super.onStop();
    mMap.onStop();
}

@Override
public void onLowMemory() {
    MapView mMap = findViewById(R.id.map);
    super.onLowMemory();
    mMap.onLowMemory();
}

@Override
public void onDestroy() {
    MapView mMap = findViewById(R.id.map);
    super.onDestroy();
    mMap.onDestroy();
}

@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onMapReady(final GoogleMap googleMap) {
    mMap = googleMap;
    LatLng Test = new LatLng(50, 9);
    mMap.animateCamera(CameraUpdateFactory.newCameraPosition( new CameraPosition.Builder().target(Test).zoom(15.0f).build()),20000, null);

}

我不会包含 xml 代码,因为它只是一个名为 "map" 的 fill_parent mapView。

我把 API 键像这样放在 AndroidManifest.xml 中:

<meta-data
 android:name="com.google.android.geo.API_KEY"
 android:value="@string/google_maps_key" />

我想就是这样。 感谢您的帮助和提示!