как получить разбор URL в карте Google, чтобы получить подробную информацию о местоположении и районе в Android - PullRequest
1 голос
/ 03 апреля 2012

вот мой код

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. Пожалуйста, скажите мне действительный URL. Также я сделал mapview (ключ API и разрешение манифеста Android) для 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)

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

Попробуйте это:

    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 голосов
/ 03 апреля 2012

создайте URL-адрес следующим образом:

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

и передайте этот URL-адрес ниже намерения

http://maps.google.co.in/maps?q=+address
0 голосов
/ 03 апреля 2012

На данный момент я вижу две основные проблемы:

  1. Вы не форматируете URL для учета пробелов и других недружественных символов.
  2. Вы используетеPOST вместо GET

Как и в случае с номером один, описанным выше, вы можете сделать это вручную или обрабатывать его с помощью URI-класса java .

* 1012.* Что касается второго, выше, вы также используете неправильный метод для вызова URL.Вы должны использовать HttpGet вместо HttpPost.

Вы можете проверить это с помощью curl:

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

Вызов POST, приведенный выше, выдаст вам ошибку, где метод GET не будет:

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

Кроме того, вместо использования строителя строк для чтения содержимого тела я нахожу использование собственного класса IOUtil в * apache более простым и понятным.

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

Однако вам придется импортироватьбиблиотека.

Наконец, убедитесь, что вы дали интернет-разрешение в своем манифесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...