Google Geocoding API(地址解析)

来源:互联网 发布:官职 知 编辑:程序博客网 时间:2024/05/19 07:07

上一片我们大概了解了一下Geocoder的bug和它的替代方法,Geocoding,直接利用http地址进行解析;下面我们来用一个实例看看如何使用http地址反回来的数据进行解析,我们这里需要用到Google自己开发的一个框架来解析json;json1.7.jar,这个类库的学习,请看:http://code.google.com/p/google-gson/

下面看实例%


1、我们如果要访问网络,首先需要在mainandroidfest.xml文件里添加权限:<uses-permission android:name="android.permission.INTERNET" />

2、修改main.xml文件,添加按钮:点击事件,进行解析;

3、给按钮添加监听器;

4、在这里我们用的是google json进行解析,所以需要两个模型,分别代表json解析出来的两个数据。一个代表一对象,list存储数组;

两具模型为:

[java] view plaincopy
  1. public class Result {  
  2.     private String[] types;  
  3.     private String formatted_address;  
  4.   
  5.     public String getFormatted_address() {  
  6.         return formatted_address;  
  7.     }  
  8.   
  9.     public void setFormatted_address(String formattedAddress) {  
  10.         formatted_address = formattedAddress;  
  11.     }  
  12.   
  13.     public String[] getTypes() {  
  14.         return types;  
  15.     }  
  16.   
  17.     public void setTypes(String[] types) {  
  18.         this.types = types;  
  19.     }  
  20.   
  21.     @Override  
  22.     public String toString() {  
  23.         return "Result [formatted_address=" + formatted_address + ", types="  
  24.                 + Arrays.toString(types) + "]";  
  25.     }  
  26.   
  27. }  

[java] view plaincopy
  1. public class TestResult {  
  2.     private String status;  
  3.     private List<Result> results;  
  4.   
  5.     public String getStatus() {  
  6.         return status;  
  7.     }  
  8.   
  9.     public void setStatus(String status) {  
  10.         this.status = status;  
  11.     }  
  12.   
  13.     public List<Result> getResults() {  
  14.         return results;  
  15.     }  
  16.   
  17.     public void setResults(List<Result> results) {  
  18.         this.results = results;  
  19.     }  
  20.   
  21.     @Override  
  22.     public String toString() {  
  23.         return "TestResult [results=" + results + ", status=" + status + "]";  
  24.     }  
  25.   
  26. }  

Activity代码为:

[java] view plaincopy
  1. public class HelloGPS2Activity extends Activity {  
  2.     private Button geoButton = null;  
  3.     /** Called when the activity is first created. */  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.           
  9.         geoButton = (Button)findViewById(R.id.geoButton);  
  10.         geoButton.setOnClickListener(new OnClickListener() {  
  11.               
  12.             @Override  
  13.             public void onClick(View v) {  
  14.                 String url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=false";  
  15.                 //创建一个HttpClient对象  
  16.                 HttpClient httpClient = new DefaultHttpClient();  
  17.                 String responseData = "";  
  18.                 try{  
  19.                     //向指定的URL发送Http请求  
  20.                     HttpResponse response = httpClient.execute(new HttpGet(url));  
  21.                     //取得服务器返回的响应  
  22.                     HttpEntity entity = response.getEntity();  
  23.                     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent()));  
  24.                     String line = "";  
  25.                     while((line = bufferedReader.readLine()) != null){  
  26.                         responseData = responseData + line;   
  27.                     }  
  28.                 }  
  29.                 catch (Exception e) {  
  30.                     e.printStackTrace();  
  31.                 }  
  32.                   
  33.                 Gson gson = new Gson();  
  34.                 TestResult testResult = gson.fromJson(responseData, TestResult.class);  
  35.                 System.out.println(testResult);  
  36.             }  
  37.         });  
  38.     }  
  39. }  

当运行之后 :点击按钮:就会将接受到的地址JSON数据解析出来:

[html] view plaincopy
  1. 08-15 03:33:23.703: INFO/System.out(281): TestResult [results=[Result [formatted_address=279-281 Bedford Ave, Brooklyn, NY 11211, USA, types=[street_address]], Result [formatted_address=Williamsburg, NY, USA, types=[neighborhood, political]], Result [formatted_address=Brooklyn, NY 11211, USA, types=[postal_code]], Result [formatted_address=Brooklyn, NY, USA, types=[sublocality, political]], Result [formatted_address=Kings, New York, USA, types=[administrative_area_level_2, political]], Result [formatted_address=New York, NY, USA, types=[locality, political]], Result [formatted_address=New York, USA, types=[administrative_area_level_1, political]]], status=OK]  

我们可以进一步提取里面的信息


0 0
原创粉丝点击