我使用此有用的code snippet来获取我的android应用程序中的当前位置,现在我想获取route
(街道地址),street_number
,postal_code
和country
(始终为long_name
)在Google Geocoding JSON对象中。目前,我使用do-while循环,然后拆分formatted_address
以得到所需的结果,但我认为最好通过其键访问该值。
JSON看起来像这样:
{
"results": [
{
"types": [
"street_address"
],
"formatted_address": "RotenturmstraÃe 2, 1010 Vienna, Austria",
"address_components": [
{
"types": [
"street_number"
],
"short_name": "2",
"long_name": "2"
},
{
"types": [
"route"
],
"short_name": "Rotenturmstr.",
"long_name": "RotenturmstraÃe"
},
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"short_name": "Innere Stadt",
"long_name": "Innere Stadt"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
},
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
}
],
"geometry": {
"viewport": {
"southwest": {
"lng": 16.3719497197085,
"lat": 48.20797491970851
},
"northeast": {
"lng": 16.3746476802915,
"lat": 48.2106728802915
}
},
"location": {
"lng": 16.3732987,
"lat": 48.2093239
},
"location_type": "ROOFTOP"
}
},
{
"types": [
"neighborhood",
"political"
],
"formatted_address": "Stephansdom, 1010 Vienna, Austria",
"address_components": [
{
"types": [
"neighborhood",
"political"
],
"short_name": "Stephansdom",
"long_name": "Stephansdom"
},
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"short_name": "Innere Stadt",
"long_name": "Innere Stadt"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
},
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.3663459,
"lat": 48.2016949
},
"northeast": {
"lng": 16.382804,
"lat": 48.21546559999999
}
},
"viewport": {
"southwest": {
"lng": 16.3663459,
"lat": 48.2016949
},
"northeast": {
"lng": 16.382804,
"lat": 48.21546559999999
}
},
"location": {
"lng": 16.3767451,
"lat": 48.2083206
},
"location_type": "APPROXIMATE"
}
},
{
"types": [
"postal_code"
],
"formatted_address": "1010 Vienna, Austria",
"address_components": [
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"viewport": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"location": {
"lng": 16.3677601,
"lat": 48.2083556
},
"location_type": "APPROXIMATE"
}
},
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"formatted_address": "Innere Stadt, 1010 Vienna, Austria",
"address_components": [
{
"types": [
"sublocality_level_1",
"sublocality",
"political"
],
"short_name": "Innere Stadt",
"long_name": "Innere Stadt"
},
{
"types": [
"locality",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
},
{
"types": [
"postal_code"
],
"short_name": "1010",
"long_name": "1010"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"viewport": {
"southwest": {
"lng": 16.3552218,
"lat": 48.1992606
},
"northeast": {
"lng": 16.3853131,
"lat": 48.2185876
}
},
"location": {
"lng": 16.3697428,
"lat": 48.2088774
},
"location_type": "APPROXIMATE"
}
},
{
"types": [
"administrative_area_level_1",
"political"
],
"formatted_address": "Vienna, Austria",
"address_components": [
{
"types": [
"administrative_area_level_1",
"political"
],
"short_name": "Vienna",
"long_name": "Vienna"
},
{
"types": [
"country",
"political"
],
"short_name": "AT",
"long_name": "Austria"
}
],
"geometry": {
"bounds": {
"southwest": {
"lng": 16.1826199,
"lat": 48.1182699
},
"northeast": {
"lng": 16.5774999,
"lat": 48.3230999
}
},
"viewport": {
"southwest": {
"lng": 16.1826199,
"lat": 48.1182699
},
"northeast": {
"lng": 16.5774999,
"lat": 48.3230999
}
},
"location": {
"lng": 16.3738138,
"lat": 48.20823499999999
},
"location_type": "APPROXIMATE"
}
}
]
这是我的代码:
public static JSONObject getLocationInfo(double lat, double lng) {
HttpGet httpGet = new HttpGet("http://maps.googleapis.com/maps/api/geocode/json?latlng="+ lat+","+lng +"&sensor=true");
HttpClient client = new DefaultHttpClient();
HttpResponse response;
StringBuilder stringBuilder = new StringBuilder();
try {
response = client.execute(httpGet);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int b;
while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(stringBuilder.toString());
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
public static String getCurrentLocationViaJSON(double lat, double lng) {
JSONObject jsonObj = getLocationInfo(lat, lng);
Log.i("JSON string =>", jsonObj.toString());
String currentLocation = "testing";
String street_address = null;
String postal_code = null;
try {
String status = jsonObj.getString("status").toString();
Log.i("status", status);
if(status.equalsIgnoreCase("OK")){
JSONArray results = jsonObj.getJSONArray("results");
int i = 0;
Log.i("i", i+ "," + results.length() ); //TODO delete this
do{
JSONObject r = results.getJSONObject(i);
JSONArray typesArray = r.getJSONArray("types");
String types = typesArray.getString(0);
if(types.equalsIgnoreCase("street_address")){
street_address = r.getString("formatted_address").split(",")[0];
Log.i("street_address", street_address);
}else if(types.equalsIgnoreCase("postal_code")){
postal_code = r.getString("formatted_address");
Log.i("postal_code", postal_code);
}
if(street_address!=null && postal_code!=null){
currentLocation = street_address + "," + postal_code;
Log.i("Current Location =>", currentLocation); //Delete this
i = results.length();
}
i++;
}while(i<results.length());
Log.i("JSON Geo Locatoin =>", currentLocation);
return currentLocation;
}
} catch (JSONException e) {
Log.e("testing","Failed to load JSON");
e.printStackTrace();
}
return null;
}
任何帮助将不胜感激。
getJSONObject(i)
,getJSONArray()
和getString()
解析数据。