how to get parse url in google map to get the details about location and neighbourhood in android

為{幸葍}努か 提交于 2020-01-05 09:06:47

问题


here is my code

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;
            }

I am getting a json exception , at the response . please tell me a valid url . Also I did mapview (api key and android manifest permission) for gps.

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)

回答1:


Try this:

    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();
}



回答2:


At this point, I can see two main issues:

  1. You are not formatting the url to account for spaces and other non-url friendly characters.
  2. You are using a POST instead of a GET

As for number one, above, you can do this manually, or you can have it handled through java's URI class.

As for number two, above, you are also using the wrong method to call the URL. You should be using HttpGet instead of HttpPost.

You can test this out by using curl:

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

The POST call above will give you and error, where as the GET method will not:

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

Also, instead of using string builder to read the body contents, I find using apache's own IOUtil's class to be easier and more straightforward.

StringWriter writer = new StringWriter();
IOUtils.copy(response.getEntity().getContent(), writer);

However, you would have to import the library.

Finally, make sure you have given internet permission in your manifest.




回答3:


create URL like this,

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

and pass this below url to intent

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


来源:https://stackoverflow.com/questions/9991616/how-to-get-parse-url-in-google-map-to-get-the-details-about-location-and-neighbo

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!