Черный экран MapView, но без ошибок Android - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь отобразить местоположение с помощью 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 и просто пробую. Я также уже пытался понять справку / документацию, но это не было так полезно, потому что я действительно не понимаю, с чего начать.

Я был бы очень благодарен, если бы кто-то объяснил мне ошибку. Конечно, если я пропустил важную информацию, которая вам нужна, я получу ее для вас.

edit1:

это logcat

https://pastebin.com/qMKzsQQS

Ответы [ 3 ]

0 голосов
/ 20 апреля 2020

ваш ключ API не включен, посетите этот сайт , чтобы узнать, как получить ключ API

0 голосов
/ 20 апреля 2020

Я перестал пытаться реализовать это как MapView и переключился на MapAcitvity. Реализовать это намного проще, кажется, просто создайте "new-> Google-> Map Activity" в Android Studio

Я думаю, что проблема с моим подходом заключалась в том, что я не знал, куда поместить 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);

}

I не будет включать код xml, так как это просто fill_parent mapView, называемый «map».

Я поместил ключ API в AndroidManifest. xml вот так:

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

Я думаю, вот и все. Спасибо за помощь и советы!

0 голосов
/ 20 апреля 2020

Добро пожаловать в StackOverflow!

Я думаю, что возможной ошибкой является то, что вам нужно позвонить mapView.onResume(bundle), mapView.onPause(), et c. в вашем Фрагменте / Деятельности:

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

Также смотрите журналы. Вы можете увидеть некоторые предупреждения из Google Maps SDK относительно неправильного ключа API или связанных с ним.

...