MapView黑屏,但在Android中没有错误

xtfmy6hx  于 2023-01-07  发布在  Android
关注(0)|答案(4)|浏览(219)

我试图用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的新手,只是在尝试一些东西。我也已经试着理解了参考/文档,但它并没有那么有帮助,因为我真的不知道从哪里开始。
如果有人能给我解释一下这个错误,我会非常感激的。当然,如果我错过了你需要的重要信息,我会帮你找回来的。
编辑1:
这是logcat
https://pastebin.com/qMKzsQQS

cgyqldqp

cgyqldqp1#

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

5t7ly7z5

5t7ly7z52#

欢迎来到本站!
我认为可能的陷阱是,你需要在你的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中阅读相关信息。
另外,请查看日志。您可以看到一些警告,从谷歌MapSDK有关错误的API密钥,或相关的。

thigvfpy

thigvfpy3#

我不再尝试将其实现为MapView,而是切换到MapActivity。实现它似乎要容易得多,只需在Android Studio中创建"new-〉Google-〉Map Activity"即可
我认为我的方法的问题是,我不知道在哪里把api键。虽然它没有thow一个关于这个错误...
编辑:
下面是我如何让它工作的解决方案/示例:

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" />

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

相关问题