Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
地理编码您的位置找到android eclipse_Android_Eclipse_Gps_Geocoding - Fatal编程技术网

地理编码您的位置找到android eclipse

地理编码您的位置找到android eclipse,android,eclipse,gps,geocoding,Android,Eclipse,Gps,Geocoding,我的代码当前在地图上显示用户位置。。。使用下面的代码 private void initMyLocation() { final MyLocationOverlay overlay = new MyLocationOverlay(this, map); overlay.enableMyLocation(); overlay.runOnFirstFix(new Runnable() { public void run() { con

我的代码当前在地图上显示用户位置。。。使用下面的代码

private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
    overlay.enableMyLocation();

    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            controller.setZoom(8);
            controller.animateTo(overlay.getMyLocation());
        }
    });
    map.getOverlays().add(overlay);
}
我想使用用户的当前位置并对其执行地理定位,以将地址显示为toast消息。。我是否必须删除上面的代码并通过单独的经度和纬度值检索位置?最好我不想去更改上面的代码,因为它已经工作了。。我似乎找不到任何好的教程。。有人能告诉我怎么走吗? 谢谢

因为MyLocationOverlay已经实现了LocationListener,所以您可以简单地将其子类化并覆盖onLocationChanged listener方法,并在那里执行地理编码,最好是在新的线程/异步任务中执行,以避免阻塞覆盖处理

比如:

private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map){
        public void onLocationChanged(android.location.Location location)
        {
            //subclass AsyncTask to take a location parameter for 
            //doInBackground where it geocodes and then passes a String
            //to onPostExecute where you can display a toast
            new MyAsyncTask().execute(location);

            //remember to call the parent implementation to avoid breaking
            //MyLocationOverlay default functionality
            super.onLocationChanged(location);
        }
    };
    overlay.enableMyLocation();

    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            controller.setZoom(8);
            controller.animateTo(overlay.getMyLocation());
        }
    });
    map.getOverlays().add(overlay);
}
另一个选项可能是编写一个自定义LocationListener并注册location的更新,并执行与上面代码中几乎相同的操作。在我看来,这可能是多余的,而且不必要的昂贵,因为如上所述,您已经有一个LocationListener实现要挂接,那么为什么还要编写另一个呢


@不,很好,很好,谢谢..它出现了一个错误MyAsyncTask无法解析为类型“。。那么,我是否要创建一个新类来执行地理编码-“MyAsyncTask”类??我找到的任何地理编码教程都使用了经度和纬度。。那么我可以传递我的位置变量进行地理编码吗?抱歉,我对android非常陌生。@IrishGal是的,如果您看到代码段中的注释,我建议您应该“为AsyncTask创建子类”。因此,您应该创建一个新类,扩展您应该在其中编写地理编码代码的地方。使用AsyncTask或任何其他技术生成新线程的原因是,地理编码很可能是一项涉及网络I/O的昂贵操作,这将阻止MyLocationOverlay的操作,因为我们从该类中启动它。此外,该对象具有getLatitude和Get经度方法,这些方法将为您提供该对象封装的纬度和经度值。