2012-04-03 73 views
1

關於位置和鄰里的細節這裏是我的代碼如何讓解析網址在谷歌地圖獲得Android中

public static JSONObject getLocationInfo(String address) { 
       StringBuilder stringBuilder = new StringBuilder(); 
       try { 

       // address = address.replaceAll(" ","%20");  

       HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false"); 
       HttpClient client = new DefaultHttpClient(); 
       HttpResponse response; 
       stringBuilder = new StringBuilder(); 


        response = client.execute(httppost); 
        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) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       return jsonObject; 
      } 

我得到一個JSON例外,在響應。請告訴我一個有效的網址。我也爲gps做過mapview(api key和android manifest許可)。

的logcat:

04-03 16:35:20.548: E/CheckinTask(202): java.net.UnknownHostException: android.clients.google.com 
04-03 16:35:20.548: E/CheckinTask(202):  at java.net.InetAddress.lookupHostByName(InetAddress.java:506) 
04-03 16:35:20.548: E/CheckinTask(202):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294) 
04-03 16:35:20.548: E/CheckinTask(202):  at java.net.InetAddress.getAllByName(InetAddress.java:256) 
04-03 16:35:20.548: E/CheckinTask(202):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 
04-03 16:35:20.548: E/CheckinTask(202):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
04-03 16:35:20.548: E/CheckinTask(202):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
04-03 16:35:20.548: E/CheckinTask(202):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 
04-03 16:35:20.548: E/CheckinTask(202):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
04-03 16:35:20.548: E/CheckinTask(202):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
04-03 16:35:20.548: E/CheckinTask(202):  at android.net.http.AndroidHttpClient.execute(AndroidHttpClient.java:248) 
04-03 16:35:20.548: E/CheckinTask(202):  at com.google.android.common.http.GoogleHttpClient.executeWithoutRewriting(GoogleHttpClient.java:203) 
04-03 16:35:20.548: E/CheckinTask(202):  at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:245) 
04-03 16:35:20.548: E/CheckinTask(202):  at com.google.android.common.http.GoogleHttpClient.execute(GoogleHttpClient.java:313) 
04-03 16:35:20.548: E/CheckinTask(202):  at com.google.android.gsf.checkin.CheckinTask.sendRequest(CheckinTask.java:254) 
04-03 16:35:20.548: E/CheckinTask(202):  at com.google.android.gsf.checkin.CheckinTask.doInBackground(CheckinTask.java:150) 
04-03 16:35:20.548: E/CheckinTask(202):  at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:221) 
04-03 16:35:20.548: E/CheckinTask(202):  at com.google.android.gsf.checkin.CheckinService$1.doInBackground(CheckinService.java:214) 
04-03 16:35:20.548: E/CheckinTask(202):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
04-03 16:35:20.548: E/CheckinTask(202):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
04-03 16:35:20.548: E/CheckinTask(202):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
04-03 16:35:20.548: E/CheckinTask(202):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
04-03 16:35:20.548: E/CheckinTask(202):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
04-03 16:35:20.548: E/CheckinTask(202):  at java.lang.Thread.run(Thread.java:1019) 
+0

粘貼錯誤日誌以供參考的URL是正確的獲取與給定字符串 – 2012-04-03 10:47:59

+0

@divaNilisha匹配的所有地址,請參閱此鏈接https://developers.google.com/maps/documentation/地理編碼/#地理編碼響應,並且發佈您的logcat對我們很有幫助。 – 2012-04-03 11:00:46

+0

如何在這裏把logcat錯誤,而不是評論,對不起,我是新來的。 – divaNilisha 2012-04-03 11:09:32

回答

1

試試這個:

private String getJSONFile(String URL) { 
    HttpGet httpGet = new HttpGet(URL); 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpResponse httpResponse; 
    StringBuilder stringBuilder = new StringBuilder(); 

    try { 
     httpResponse = httpClient.execute(httpGet); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     InputStream inputStream = httpEntity.getContent(); 
     int c; 
     while ((c = inputStream.read()) != -1) { 
      stringBuilder.append((char) c); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return stringBuilder.toString(); 
} 
+0

你說的是哪種方法? – divaNilisha 2012-04-03 13:19:38

+0

我仍然有未知的主機異常 – divaNilisha 2012-04-04 08:35:26

+0

您是否在模擬器或設備上運行您的應用程序? – 2012-04-04 09:47:33

0

在這一點上,我可以看到兩個主要問題:

  1. 你是不是格式化的URL佔空間和其他非URL友好字符。
  2. 您正在使用POST而不是GET

至於一個數字,上面,你可以手動做到這一點,或者你可以把它通過Java的URI class處理。

至於上面的第二個,您也正在使用錯誤的方法來調用URL。你應該使用HttpGet而不是HttpPost。

您可以測試了這一點,通過使用curl:

curl -X POST 'http://maps.google.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC&sensor=false' 

支柱上方的通話將讓你和你的錯誤,在這裏爲GET方法不會:

curl -X GET 'http://maps.google.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC&sensor=false' 

此外,而不是使用字符串生成器來讀取正文內容,我發現使用Apache自己的IOUtil's class更容易和更直接。但是,您將不得不導入庫。

最後,請確保您已在您的清單中提供了互聯網許可。

+0

這也適用於我..謝謝 – divaNilisha 2012-04-06 06:33:07

0

創建URL這樣,

String address = "yagnik+road,+rajkot"; 

,並通過此以下鏈接直接意圖

http://maps.google.co.in/maps?q=+address