Android Geocoder get short name of admin area
When using google maps API for admin area it gives long name and short name eg.
{
"long_name": "Victoria",
"short_name": "VIC",
"types": [
"administrative_area_level_1",
"political"
]
}
however, when I use the native Android geocoder, I only get the long name (in this case "Victoria"). Is there a way to get the short name of the admin area in android other than the Google Maps geocoding API integration?
source to share
I'm going to keep it short and simple, I changed my position a bit. As it took me a couple of hours to do this.
I first made a list of cards to find the name of the state and then convert it to a 2-letter code like this:
Map<String, String> states = new HashMap<>();
states.put("Alabama","AL");
states.put("Alaska","AK");
states.put("Alberta","AB");
states.put("American Samoa","AS");
states.put("Arizona","AZ");
states.put("Arkansas","AR");
states.put("Armed Forces (AE)","AE");
states.put("Armed Forces Americas","AA");
states.put("Armed Forces Pacific","AP");
states.put("British Columbia","BC");
states.put("California","CA");
states.put("Colorado","CO");
states.put("Connecticut","CT");
states.put("Delaware","DE");
states.put("District Of Columbia","DC");
states.put("Florida","FL");
states.put("Georgia","GA");
states.put("Guam","GU");
states.put("Hawaii","HI");
states.put("Idaho","ID");
states.put("Illinois","IL");
states.put("Indiana","IN");
states.put("Iowa","IA");
states.put("Kansas","KS");
states.put("Kentucky","KY");
states.put("Louisiana","LA");
states.put("Maine","ME");
states.put("Manitoba","MB");
states.put("Maryland","MD");
states.put("Massachusetts","MA");
states.put("Michigan","MI");
states.put("Minnesota","MN");
states.put("Mississippi","MS");
states.put("Missouri","MO");
states.put("Montana","MT");
states.put("Nebraska","NE");
states.put("Nevada","NV");
states.put("New Brunswick","NB");
states.put("New Hampshire","NH");
states.put("New Jersey","NJ");
states.put("New Mexico","NM");
states.put("New York","NY");
states.put("Newfoundland","NF");
states.put("North Carolina","NC");
states.put("North Dakota","ND");
states.put("Northwest Territories","NT");
states.put("Nova Scotia","NS");
states.put("Nunavut","NU");
states.put("Ohio","OH");
states.put("Oklahoma","OK");
states.put("Ontario","ON");
states.put("Oregon","OR");
states.put("Pennsylvania","PA");
states.put("Prince Edward Island","PE");
states.put("Puerto Rico","PR");
states.put("Quebec","PQ");
states.put("Rhode Island","RI");
states.put("Saskatchewan","SK");
states.put("South Carolina","SC");
states.put("South Dakota","SD");
states.put("Tennessee","TN");
states.put("Texas","TX");
states.put("Utah","UT");
states.put("Vermont","VT");
states.put("Virgin Islands","VI");
states.put("Virginia","VA");
states.put("Washington","WA");
states.put("West Virginia","WV");
states.put("Wisconsin","WI");
states.put("Wyoming","WY");
states.put("Yukon Territory","YT");
Then I added it to the "Location String" result after doing all the focus focus to get the address like
Address address = addressList.get(0);
String state = states.get(address.getAdminArea());
result = address.getLocality() + ", " + state;
Hope you had this before I did this, but I just decided to put this up for anyone else who needs it. I ended up on this page when I fixed it.
NOTE. The Map list (not the location map) contains the "states" of Canada and some other places that use abbreviations.
source to share
After some searching I found one solution for this
String url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitude + "," + longitude + "&sensor=true";
RequestQueue mVolleyQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
Log.i("response ", response);
JSONObject jsonObject = new JSONObject(response);
JSONArray arrayResult = jsonObject.getJSONArray("results");
JSONArray arrComponent = arrayResult.getJSONObject(0).getJSONArray("address_components");
for (int i = 0; i < arrComponent.length(); i++) {
JSONArray arrType = arrComponent.getJSONObject(i).getJSONArray("types");
for (int j = 0; j < arrType.length(); j++) {
if (arrType.getString(j).equals("administrative_area_level_1")) {
longname = arrComponent.getJSONObject(i).getString("long_name");
shortname = arrComponent.getJSONObject(i).getString("short_name");
Log.i("longname", longname);
Log.i("shortname", shortname);
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
stringRequest.setShouldCache(false);
stringRequest.setTag("Volley");
mVolleyQueue.add(stringRequest);
Happy Codding :)
source to share