Ошибка RPC с геокодером - PullRequest
       1

Ошибка RPC с геокодером

26 голосов
/ 02 декабря 2010

Через несколько дней, чтобы узнать, как работает Android, я решил создать свое первое приложение: простое приложение, которое отображает GMap по адресу, предоставленному пользователем, с простым виджетом EditText.
Я использую Geocoderсделать это.

После небольшого отслеживания ошибок с помощью logcat, вот исключение, возвращаемое adb:

E/LocationMasfClient(   53): forwardGeocode(): RPC failed with status 1
W/System.err(  262): java.io.IOException: RPC failed with status 1
W/System.err(  262):    at   android.location.Geocoder.getFromLocationName(Geocoder.java:166)
W/System.err(  262):    at fr.meetopia.tinymap.MapViewActivity.testGeoCoder(MapViewActivity.java:104)
W/System.err(  262):    at fr.meetopia.tinymap.MapViewActivity.onCreate(MapViewActivity.java:38)
W/System.err(  262):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
W/System.err(  262):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
W/System.err(  262):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
W/System.err(  262):    at android.app.ActivityThread.access$2200(ActivityThread.java:119)
W/System.err(  262):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)

А теперь вот код, указанный трассировкой стека:

Geocoder geoCoder = new Geocoder(this);
MapView mapView = (MapView) findViewById(R.id.mapview);
    MapController mc = mapView.getController();
    GeoPoint p;
    try {
        List<Address> addresses = geoCoder.getFromLocationName("paris france", 50);
        if (addresses.size() > 0) {
            p = new GeoPoint(
                    (int) (addresses.get(0).getLatitude() * 1E6), 
                    (int) (addresses.get(0).getLongitude() * 1E6));
            mc.animateTo(p);    
            mapView.invalidate();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Очевидно, этот код является частью MapActivity экземпляра.

Я провел несколько тестов с разными версиями Google APIS (8, 7, 4) и разными версиями платформы SDK (2.2, 2.1, 1.6), но не повезло.Я только что заметил, что Google API 8 содержит известную ошибку и вернул Service Unavailable Exception вместо RPC Failed 1.

С другой стороны, я попытался запустить свое приложение непосредственно на моем устройстве (HTC Desire 2.1)и я заметил то же самое поведение (то есть: без поведения, карта с США в центре).

Вот пользовательское разрешение манифеста Android:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

Ответы [ 4 ]

3 голосов
/ 07 апреля 2012

Пожалуйста, посетите мой пост Не можете пометить, показывая текущее местоположение в 'mapview' Я думаю, что с некоторыми предыдущими изменениями вы сможете делать все, что вы нацелены.

2 голосов
/ 12 апреля 2012

Я думаю, есть две причины для вас.

  1. Не тестировал, но геокодер по-прежнему будет недоступен при работе в симуляторе. Даже если geocoder.isPresent () возвращает true. В Интернете есть обходной путь, просто прочитайте выпуск 8816 - android для getFromLocationName (..) в комментарии 21 и он прикреплен ReverseGeocoder.java

  2. Как сказал Стефан: при запуске на устройстве необходим ключ API. Должен быть добавлен в layout.xml вашего просмотра карты.

Лучший способ создать и протестировать картографическое представление для меня - это реализовать его как обычно, войти в систему и попробовать обходной путь, если «Служба недоступна» .equals (exception.getMessage ()).

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

Класс Geocoder содержит ошибки. Это работает странно время от времени. Я рекомендую не использовать для получения местоположения. Вместо Local Search API и Location manager для использования сервисов определения местоположения.

1 голос
/ 14 февраля 2012

Это моя функция геокодирования, она отлично работает на Google API 7. Надеюсь, она полезна

public GeoPoint geoCoding(String name){
         Geocoder geoCoder = new Geocoder(context, Locale.getDefault() );   
         GeoPoint p = null;
            try {
                List<Address> addresses = geoCoder.getFromLocationName(
                    name, 5);
                if (addresses.size() > 0) {
                    p = new GeoPoint(
                            (int) (addresses.get(0).getLatitude() * 1E6), 
                            (int) (addresses.get(0).getLongitude() * 1E6));

                }    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return p;
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...