mapFrag.getMapAsyn c () проблемы во время цикла - PullRequest
0 голосов
/ 12 февраля 2020

Мне действительно нужна помощь для решения проблемы, которую я не знаю, как решить. Я пытаюсь подать заявку на моего отца, и я буду работать с картой. Проблема заключается в том, что c в mapFrag.getMapAsync() через некоторое время l oop.

@Override
public void onResume(){
    super.onResume();
    new Thread(){
        public void run(){
            while ( mapFrag.getMapAsync() == null){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    configMap();
                }
            });
        }
    }.start();
}

while ( mapFrag.getMapAsync(), в этой строке выдается ошибка:

getMapAsync(OnMapReadyCallback) in SupportMapFragment cannot be applied to ()

OnMapReadyCallback был реализован для MainActivity.

1 Ответ

0 голосов
/ 12 февраля 2020

Согласно документации для MapFragment.getMapAsync():

public void getMapAsync (OnMapReadyCallback callback)

Устанавливает объект обратного вызова, который будет запускаться, когда экземпляр GoogleMap будет готов к работе. used.

Обратите внимание:

Этот метод должен вызываться из основного потока.

Обратный вызов будет выполнен в основном потоке.

In В случае, когда сервисы Google Play не установлены на устройстве пользователя, обратный вызов не будет запущен, пока пользователь не установит его. В редком случае, когда GoogleMap уничтожается сразу после создания, обратный вызов не запускается.

Объект GoogleMap, предоставленный обратным вызовом, не равен нулю.

Особенно это:

Параметры callback Объект обратного вызова, который будет запущен, когда карта будет готова к использованию.

В вашем вызове mapFrag.getMapAsync() нет OnMapReadyCallback параметр. Итак, вы должны добавить это:

...
mapFrag.getMapAsync(new OnMapReadyCallback() {
    @Override
    public void onMapReady(GoogleMap googleMap) {
        googleMap.moveCamera(cameraUpdate);
    }
})
...

И вам не следует вызывать getMapAsync() в отдельном потоке из-за (см. Ссылку на документацию выше):

  • Этот метод должен вызываться из основного потока.

  • Обратный вызов будет выполнен в основном потоке.

Поэтому, пожалуйста, внимательно прочитайте официальный Начало работы страница.

...