android开发分享Android:反向地理编码 – getFromLocation

我正在尝试获取基于long / lat的地址。 看起来像这样的东西应该工作?

Geocoder myLocation = Geocoder(Locale.getDefault()); List myList = myLocation.getFromLocation(latPoint,lngPoint,1); 

问题是,我不断得到:typessavemaplocation未定义方法Geocoder(Locale)

任何援助将是有益的。 谢谢。


谢谢,我尝试了上下文,第一个语言环境,并失败了,正在看一些其他的构造函数(我曾经看过一个刚刚提到的语言环境)。 而不pipe,

它没有工作,因为我仍然得到:方法Geocoder(上下文,区域设置)未定义的typessavemaplocation

我有:导入android.location.Geocoder;

    下面的代码片段正在为我做(lat和lng是在这个位上面声明的双打):

     Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 

    这是一个完整的示例代码,使用线程和处理程序来获取Geocoder的答案,而不会阻塞用户界面。

    Geocoder调用过程,可以位于Helper类中

     public static void getAddressFromLocation( final Location location, final Context context, final Handler handler) { Thread thread = new Thread() { @Override public void run() { Geocoder geocoder = new Geocoder(context, Locale.getDefault()); String result = null; try { List<Address> list = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), 1); if (list != null && list.size() > 0) { Address address = list.get(0); // sending back first address line and locality result = address.getAddressLine(0) + ", " + address.getLocality(); } } catch (IOException e) { Log.e(TAG, "Impossible to connect to Geocoder", e); } finally { Message msg = Message.obtain(); msg.setTarget(handler); if (result != null) { msg.what = 1; Bundle bundle = new Bundle(); bundle.putString("address", result); msg.setData(bundle); } else msg.what = 0; msg.sendToTarget(); } } }; thread.start(); } 

    以下是您的UI活动中对此Geocoder过程的调用:

     getAddressFromLocation(mLastKownLocation, this, new GeocoderHandler()); 

    处理程序在您的用户界面中显示结果:

     private class GeocoderHandler extends Handler { @Override public void handleMessage(Message message) { String result; switch (message.what) { case 1: Bundle bundle = message.getData(); result = bundle.getString("address"); break; default: result = null; } // replace by what you need to do myLabel.setText(result); } } 

    不要忘记把你的Manifest.xml的以下权限

     <uses-permission android:name="android.permission.INTERNET" /> 

    看起来这里有两件事情发生。

    1)在调用构造函数之前,您已经错过了new关键字。

    2)您传递给Geocoder构造函数的参数不正确。 您正在传递一个期望ContextLocale

    有两个Geocoder构造函数,都需要一个Context ,还有一个地方:

     Geocoder(Context context, Locale locale) Geocoder(Context context) 

    修改你的代码传入一个有效的上下文,并包括new ,你应该很好去。

     Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault()); List<Address> myList = myLocation.getFromLocation(latPoint, lngPoint, 1); 

    注意

    如果你仍然有问题,这可能是一个许可问题。 地理编码隐含地使用互联网来执行查找,因此您的应用程序将需要清单中的INTERNET使用权限标签。

    manifest节点内添加以下uses-permission节点。

     <uses-permission android:name="android.permission.INTERNET" /> 

    原因是不存在的后端服务:

    Geocoder类需要一个不包含在核心android框架中的后端服务。 如果平台中没有后端服务,Geocoder查询方法将返回一个空列表。

    首先使用Location和LocationManager类获取纬度和经度。 现在尝试下面的代码获取城市,地址信息

     double latitude = location.getLatitude(); double longitude = location.getLongitude(); Geocoder gc = new Geocoder(this, Locale.getDefault()); try { List<Address> addresses = gc.getFromLocation(lat, lng, 1); StringBuilder sb = new StringBuilder(); if (addresses.size() > 0) { Address address = addresses.get(0); for (int i = 0; i < address.getMaxAddressLineIndex(); i++) sb.append(address.getAddressLine(i)).append("n"); sb.append(address.getLocality()).append("n"); sb.append(address.getPostalCode()).append("n"); sb.append(address.getCountryName()); } 

    市信息现在在sb。 现在将sb转换为String(使用sb.toString())。

    那么,我仍然难倒。 所以这里是更多的代码。

    在我离开我的地图之前,我调用了SaveLocation(myMapView,myMapController); 这就是最终调用我的地理编码信息。

    但由于getFromLocation可以抛出一个IOException ,我不得不做以下调用SaveLocation

     try { SaveLocation(myMapView,myMapController); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

    然后我必须改变SaveLocation通过说它抛出IOExceptions:

      public void SaveLocation(MapView mv, MapController mc) throws IOException{ //I do this : Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault()); List myList = myLocation.getFromLocation(latPoint, lngPoint, 1); //... } 

    每次都会崩溃。

    我听说Geocoder是在越野车方面。 我最近汇集了一个使用Google的http地理编码服务从lat / long查找位置的示例应用程序。 随意在这里查看

    用这个

     Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 

      以上就是android开发分享Android:反向地理编码 – getFromLocation相关内容,想了解更多android开发(异常处理)及android游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/addevelopment/523350.html

      (0)
      性感美女图片性感美女图片
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐