while 循环中的 mapFrag.getMapAsync() 问题

Posted

技术标签:

【中文标题】while 循环中的 mapFrag.getMapAsync() 问题【英文标题】:mapFrag.getMapAsync() problems in a while loop 【发布时间】:2020-05-27 11:09:27 【问题描述】:

对于一个我不知道如何解决的问题,我真的需要帮助。 我正在尝试为我父亲申请,我将与 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 上实现的。

【问题讨论】:

这能回答你的问题吗? Google Map:onMapReadyCallback can not be applied to this activity 不幸的是,我的问题集中在 getMapAsync 作为参数 在这种情况下,您能否提供指向您正在调用的getMapAsync()确切 版本的文档的链接? 【参考方案1】:

根据MapFragment.getMapAsync() 的文档:

public void getMapAsync (OnMapReadyCallback callback)

设置一个回调对象,当 GoogleMap 实例已准备好使用。

注意:

这个方法必须从主线程调用。

回调将在主线程中执行。

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

回调提供的GoogleMap对象不为空。

尤其是这个:

参数callback时会触发的回调对象 地图可以使用了。

在您的电话mapFrag.getMapAsync() 中没有OnMapReadyCallback 参数。所以,你应该添加它:

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

而且你不应该在单独的线程中调用getMapAsync(),因为(参见上面的文档链接):

这个方法必须从主线程调用。

回调将在主线程中执行。

所以,请仔细阅读官方Get Started页面。

【讨论】:

以上是关于while 循环中的 mapFrag.getMapAsync() 问题的主要内容,如果未能解决你的问题,请参考以下文章

java中的循环 while

浅谈python中的while循环

循环语句中while(1)中的1是啥意思

如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?

while循环中的空间分配

PHP 语言中的 while 循环语句