猿问

Android:反向地理编码 - getFromLocation

Android:反向地理编码 - getFromLocation

我想基于long / lat得到一个地址。似乎这样的事情应该有效吗?

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

问题是我不断得到:方法Geocoder(Locale)未定义类型savemaplocation

任何帮助都会有所帮助。谢谢。


谢谢,我尝试了上下文,首先是locale,然后失败了,并且正在查看其他一些构造函数(我曾经看过一个只提到locale)。而不管,

它没有用,因为我仍然得到:方法Geocoder(Context,Locale)未定义类型savemaplocation

我有:import android.location.Geocoder;


白板的微信
浏览 1922回答 3
3回答

慕盖茨4494581

以下代码片段正在为我做(lat和lng是在此位上方声明的双精度数):Geocoder&nbsp;geocoder&nbsp;=&nbsp;new&nbsp;Geocoder(this,&nbsp;Locale.getDefault()); List<Address>&nbsp;addresses&nbsp;=&nbsp;geocoder.getFromLocation(lat,&nbsp;lng,&nbsp;1);

慕容森

下面是一个完整的示例代码,使用Thread和Handler来获取Geocoder的答案,而不会阻止UI。Geocoder调用程序,可以位于Helper类中public&nbsp;static&nbsp;void&nbsp;getAddressFromLocation( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;Location&nbsp;location,&nbsp;final&nbsp;Context&nbsp;context,&nbsp;final&nbsp;Handler&nbsp;handler)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;thread&nbsp;=&nbsp;new&nbsp;Thread()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;public&nbsp;void&nbsp;run()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Geocoder&nbsp;geocoder&nbsp;=&nbsp;new&nbsp;Geocoder(context,&nbsp;Locale.getDefault());&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List<Address>&nbsp;list&nbsp;=&nbsp;geocoder.getFromLocation( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.getLatitude(),&nbsp;location.getLongitude(),&nbsp;1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(list&nbsp;!=&nbsp;null&nbsp;&&&nbsp;list.size()&nbsp;>&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address&nbsp;address&nbsp;=&nbsp;list.get(0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;sending&nbsp;back&nbsp;first&nbsp;address&nbsp;line&nbsp;and&nbsp;locality &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;address.getAddressLine(0)&nbsp;+&nbsp;",&nbsp;"&nbsp;+&nbsp;address.getLocality(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.e(TAG,&nbsp;"Impossible&nbsp;to&nbsp;connect&nbsp;to&nbsp;Geocoder",&nbsp;e); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;msg&nbsp;=&nbsp;Message.obtain(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.setTarget(handler); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(result&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.what&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;bundle&nbsp;=&nbsp;new&nbsp;Bundle(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bundle.putString("address",&nbsp;result); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.setData(bundle); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.what&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.sendToTarget(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;thread.start();}以下是您在UI活动中对此Geocoder过程的调用:getAddressFromLocation(mLastKownLocation,&nbsp;this,&nbsp;new&nbsp;GeocoderHandler());以及在UI中显示结果的处理程序:private&nbsp;class&nbsp;GeocoderHandler&nbsp;extends&nbsp;Handler&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;handleMessage(Message&nbsp;message)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(message.what)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bundle&nbsp;bundle&nbsp;=&nbsp;message.getData(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;bundle.getString("address"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;replace&nbsp;by&nbsp;what&nbsp;you&nbsp;need&nbsp;to&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myLabel.setText(result); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;}不要忘记将以下许可放入您的&nbsp;Manifest.xml<uses-permission&nbsp;android:name="android.permission.INTERNET"&nbsp;/>

蛊毒传说

看起来这里发生了两件事。1)new在调用构造函数之前,您已经错过了关键字。2)您传入Geocoder构造函数的参数不正确。你正在经历一个Locale期待的地方Context。有两个Geocoder构造函数,两个都需要一个Context,一个也需要Locale:Geocoder(Context&nbsp;context,&nbsp;Locale&nbsp;locale)Geocoder(Context&nbsp;context)解修改你的代码以传入一个有效的上下文并包含new,你应该很高兴。Geocoder&nbsp;myLocation&nbsp;=&nbsp;new&nbsp;Geocoder(getApplicationContext(),&nbsp;Locale.getDefault());&nbsp;&nbsp;&nbsp;List<Address>&nbsp;myList&nbsp;=&nbsp;myLocation.getFromLocation(latPoint,&nbsp;lngPoint,&nbsp;1);注意如果您仍然遇到问题,可能是一个许可问题。地理编码隐式使用Internet执行查找,因此您的应用程序将需要INTERNET清单中的uses-permission标记。在manifest清单的节点中添加以下uses-permission节点。<uses-permission&nbsp;android:name="android.permission.INTERNET"&nbsp;/>
随时随地看视频慕课网APP

相关分类

Android
我要回答