对于我不知道如何解决的问题,我真的需要帮助。
我正在为父亲申请,我将与Map一起工作。
该问题特定于while循环内的mapFrag.getMapAsync()中。

@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上实现的。

最佳答案

根据MapFragment.getMapAsync()的文档:


public void getMapAsync (OnMapReadyCallback callback)

设置一个回调对象,该对象将在GoogleMap触发时触发
实例可以使用了。

注意:

必须从主线程调用此方法。

回调将在主线程中执行。

如果用户的设备上未安装Google Play服务,则只有在用户
安装它。
GoogleMap创建后立即销毁的极少数情况下,不会触发回调。

回调提供的GoogleMap对象为非null。


特别是:


参数callback在以下情况下将触发的回调对象
该地图已准备就绪,可以使用。


您的通话mapFrag.getMapAsync()中没有OnMapReadyCallback参数。因此,您应该添加它:

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


而且,由于以下原因,您不应在单独的线程中调用getMapAsync() :(请参见上面的文档链接):


必须从主线程调用此方法。
回调将在主线程中执行。


因此,请仔细阅读Get Started官方页面。

关于java - while循环中的mapFrag.getMapAsync()问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60179090/

10-12 06:21