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
欢迎使用 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" />
我想就是这样。
感谢您的帮助和提示!
我正在尝试使用 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
欢迎使用 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" />
我想就是这样。 感谢您的帮助和提示!