{
"long_name" : "1",
"short_name" : "1",
"types" : [ "street_number" ]
},
{
"long_name" : "ABC Street",
"short_name" : "ABC Street",
"types" : [ "route" ]
},
{
"long_name" : "ABC Town",
"short_name" : "ABC",
"types" : [ "locality", "political" ]
},
{
"long_name" : "ABC Area",
"short_name" : "ABCA",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "ABC L",
"short_name" : "ABCL",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Country",
"short_name" : "CT",
"types" : [ "country", "political" ]
},
{
"long_name" : "1234",
"short_name" : "1234",
"types" : [ "postal_code" ]
}
我从谷歌地图获得此JSON并成功将其转换为GSON对象:
class address_component{
public String long_name;
public String short_name;
public String[] types;
}
我现在应该如何遍历我的类型?我需要将街道,街道编号和城镇分别保存在自己的土地上。我唯一想到的就是这个,但它看起来不对我好:
if (types.contains("street_number")) {
street_number = short_name
} else if (types.contains("route")) {
street = short_name
}
当然循环遍历每个address_component。我怎样才能做得更好?
答案 0 :(得分:0)
types
数组每个都有一个或两个记录长,而您只需要查找三种数据类型。你的方法有一些浪费的努力,但目前形式的contains(String)
事情并没有浪费太多的努力,因为数字太小了。
避免不必要工作的一个显而易见的方法是在找到街道后停止进行进一步的contains("street")
检查,对其他字段也是如此。这可能是一个简单的额外条件:
if (street_number == null && types.contains("street_number")) {
street_number = short_name
} else if (street == null && types.contains("route")) {
street = short_name
}
你没有发布足够的代码来告诉你在大局中做了什么。我看到两个潜在的问题,其成本比你要问的if-contains-else-if-contains部分要大得多。
break
迭代一旦你有你需要的三个项目,并跳过可能有更多的address_type吗?