Android 谷歌地图latLngBounds

Android 谷歌地图latLngBounds,android,multithreading,google-maps,Android,Multithreading,Google Maps,我是android的新手,我正在尝试从没有在地图上看到的多边形中清除地图。我决定用线来做这件事。但当我尝试调用contains方法时,它会抛出一个exeption“java.lang.IllegalStateException:Not on the main thread” Thread mThread=新线程(new Runnable()){ @凌驾 公开募捐{ 试一试{ while(true){ if(mPolygones==null | | mPolygones.isEmpty()) 继续

我是android的新手,我正在尝试从没有在地图上看到的多边形中清除地图。我决定用线来做这件事。但当我尝试调用contains方法时,它会抛出一个exeption“java.lang.IllegalStateException:Not on the main thread”

Thread mThread=新线程(new Runnable()){
@凌驾
公开募捐{
试一试{
while(true){
if(mPolygones==null | | mPolygones.isEmpty())
继续;
已同步(mPolygones){
对于(int i=0;i

我在OnCameraMoveListener回调中从google地图获得MLATlingBounds。有没有办法做到这一点?非常感谢您的建议

您为什么要在单独的线程中执行此操作?只要在OnCameradle侦听器中运行此代码,您就可以了。(您不需要在每次相机移动时都运行它。)

为什么要在单独的线程中执行此操作?只要在OnCameradle侦听器中运行此代码,您就可以了。(你不需要每次移动相机都运行它。)

问题出在多边形上。我试图从UI线程的多边形中获取点

问题出在多边形中。我试图从UI线程的多边形中获取点

我将尝试描述我的任务。我从gps模块接收坐标。频率从2到10赫兹。我必须处理这个坐标,并使用SphereCaltils.computeOffset()获得另外两个平行坐标。当我收到下一封信时,我也会这样做。然后我必须通过处理过的坐标加上多边形。结果是有很多人和地图呆子。我的决定是为每一个从地图上可见的多边形设置visobility false。服务提供给活动数据,另一个线程应使多线程数据不可见。就我的问题而言,truble在polygone.getPoints()中。我无法从外部完成,我将尝试描述我的任务。我从gps模块接收坐标。频率从2到10赫兹。我必须处理这个坐标,并使用SphereCaltils.computeOffset()获得另外两个平行坐标。当我收到下一封信时,我也会这样做。然后我必须通过处理过的坐标加上多边形。结果是有很多人和地图呆子。我的决定是为每一个从地图上可见的多边形设置visobility false。服务提供给活动数据,另一个线程应使多线程数据不可见。就我的问题而言,truble在polygone.getPoints()中。我无法从外部UI线程执行此操作
 Thread mThread = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            while (true) {
                if (mPolygones == null || mPolygones.isEmpty())
                    continue;
                synchronized (mPolygones) {
                    for (int i = 0; i < mPolygones.size(); i++) {
                        Polygon polygon = mPolygones.get(i);
                        if (mLatLngBounds.contains(polygon.getPoints().get(0))) {
                            Intent intent = new Intent("polygon");
                            intent.putExtra("index", i);
                            mLocalBroadcastManager.sendBroadcast(intent);
                        }

                    }
                }
            }

        } catch (Exception ex) {
            ex.getMessage();
        }
    }
});