我正在尝试在我的应用程序中使用Geocoder类,并发现如果地址是两条街道的交集,Geocoder.getFromLocationName将返回null。防爆。 " Quail Ave和Dunford Way,Sunnyvale,CA 94087" 。但是,该方法适用于任何其他类型的地址。 在调试会话期间,我可以看到地址参数已传递并正确反映,但是" geocodeMatches"返回大小(0)为零。 感谢任何帮助!
public static List<Address> getGeoCode(@NonNull Context context, @NonNull String address){
try {
geocodeMatches = new Geocoder(context).getFromLocationName(address, 1);
if (!geocodeMatches.isEmpty())
{
return geocodeMatches;
}
} catch (IOException e) {
Log.e("ERROR", "Error to retrieve geocode" + e);
e.printStackTrace();
}
return geocodeMatches;
}
答案 0 :(得分:1)
GeoCoder正在开发NetworkLocationService。在某些情况下,由于某种原因,NetworkLocationService停止工作。我不知道确切的原因。但是在这种情况下你可以从google api获得地址。 希望下面的代码可以帮到你!
public static String GetLocationAddressFromLatLong(Context context, double latitude, double longitude) {
String finalAddress = "";
Geocoder geocoder;
List<Address> addresses = null;
geocoder = new Geocoder(context.getApplicationContext(), Locale.getDefault());
try {
addresses = geocoder.getFromLocation(latitude, longitude, 1);
} catch (IOException e) {
e.printStackTrace();
}
if (addresses != null && addresses.size() > 0) {
finalAddress = addresses.get(0).getAddressLine(0) + ", " + addresses.get(0).getAddressLine(1);
} else {
//Get address from Google api
try {
JSONObject jsonObj = getJSONfromURL("http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitude + ","
+ longitude + "&sensor=true");
String Status = jsonObj.getString("status");
if (Status.equalsIgnoreCase("OK")) {
JSONArray Results = jsonObj.getJSONArray("results");
JSONObject location = Results.getJSONObject(0);
finalAddress = location.getString("formatted_address");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return finalAddress;
}