Android MapActivity: не удалось получить клиент фабрики соединений - PullRequest
14 голосов
/ 15 мая 2011

Я пытаюсь заставить демоверсии карты работать, как предусмотрено в Google API примеры проектов. Я использую AVD и пробовал с версиями 8, 10 и 11 и получите ту же проблему.

Я сгенерировал свой собственный ключ отладки и добавил в проект. я могу видеть карта в приложении запускается, и может увеличивать масштаб и т. д., поэтому я получаю карту плитка, хорошо. Да - у меня есть правильные разрешения и библиотека, установленные в Манифесте файл (по образцам).

Но я не могу установить местоположение на карте ни через DDMS, ни через Telnet. я увидеть следующую ошибку в LogCat: MapActivity: не удалось получить клиент фабрики соединений

Я читал многочисленные темы по этой проблеме, но они всегда кажутся быть в результате неправильного ключа API; которого у меня нет, так как я получение фрагментов карты.

Итак, я создал свой собственный проект, чтобы проверить это дальше, и выполняю следующий код при инициализации моей карты:

    myLocationOverlay = new MyLocationOverlay(this, mapView);
       mapView.getOverlays().add(myLocationOverlay);
       myLocationOverlay.enableCompass();
       myLocationOverlay.enableMyLocation();
       Log.i("funkatron: ", "ABOUT TO CALL RUN ON FIRST FIX");
       myLocationOverlay.runOnFirstFix(new Runnable() {
           public void run() {
               String loc = "we have a location, executing AnimateTo().
"+myLocationOverlay.getMyLocation().toString();
               Log.i("funkatron:",loc);

mapController.animateTo(myLocationOverlay.getMyLocation());
           }
       });

Я вижу мой первый оператор журнала, но не второй, и "MapActivity: Не удалось получить клиент фабрики соединений », при этом в LogCat записывается точка.

Я прочитал, что были проблемы с эмуляторами SDK v8, поэтому у меня есть пробовал с v10 и 11 - но все равно не радость Я еще не пробовал это на реальном устройстве - скоро сделаю.

Любая помощь по этому вопросу будет принята с благодарностью - это действительно сбивает с толку меня;)

ура

Ответы [ 8 ]

6 голосов
/ 02 июня 2011

у меня была точно такая же начальная ситуация, как вы описали.

когда вы видите плитки карты, очевидно, что некоторые не хватает, чтобы увидеть позицию на карте:

1.вам нужно местоположение .я осознал, что установка эмулятора только географической позиции с помощью DDMS-вида недостаточна.Вы должны явно нажимать каждый раз кнопку «Отправить» в DDMS для запуска обновления местоположения на вашем эмуляторе.(просто упомянуть: на реальном устройстве вам иногда приходится немного ходить, чтобы заставить ваше устройство получать обновление местоположения;), я был так взбешен, пока не ходил, думая о том, что теперь делать ^^)

2.вам нужна правильная реализация ItemizedOverlay с правильным OverlayItem .я написал свой собственный оверлей, который стал немного «сложным».если вы не уверены, что ваша реализация верна, используйте это руководство, чтобы создать реализацию с минимальными изменениями Руководство по просмотру карты для разработчиков Android

или используйте это:

private class MyItemizedOverlay extends ItemizedOverlay {
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable defaultMarker) {
          super(boundCenterBottom(defaultMarker));
    }

    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
      return mOverlays.get(i);
    }

    @Override
    public int size() {
      return mOverlays.size();
    }
}

private void updateLocationOverlay() {
    if (location == null) { return };
    List<Overlay> mapOverlays = mapView.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.XXXX);
    MyItemizedOverlay myItemizedOverlay = new MyItemizedOverlay(drawable);
    GeoPoint point = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));

    OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
    myItemizedOverlay.addOverlay(overlayitem);
    mapOverlays.add(myItemizedOverlay);
}

Я хочу особо отметить, что вы должны вызывать boundCenter или boundCenterBottom на чертеже.иначе это не будет нарисовано.Также будьте осторожны, если вы используете разные маркеры в одном и том же оверлее с overlayItem.setMarker, который вы тоже называете там.

3.Вы должны переместить вид на карте к вашей точке .Вы можете добиться этого следующим образом:

MapController mapController = mapView.getController();
mapController.setCenter(point)

Я понял, что функция mapController.zoomToSpan не работает.(по крайней мере для меня, я все еще разрабатываю это приложение).может быть, то же самое с animateTo .я не пробовалустановить центр работ.(и также установить уровень масштабирования).

Возможно, в упомянутых мною местах есть что-то, что может привести к тому, что ваша карта работает не так, как вы хотите.

Удачи!

edit: я забыл упомянуть, что я все еще получаю эту заводскую ошибку клиента, даже если она работает, чтобы получить действительное местоположение, реальное на устройстве и поддельное на эмуляторе с помощью ddms send).сейчас я просто игнорирую.

4 голосов
/ 02 августа 2012

Здравствуйте, разработчики,

Я тоже столкнулся с этой проблемой и провел почти полдня, пытаясь выяснить, что происходит.Первоначально действие карты вообще не отображалось, и я получал сообщение об ошибке «Не удалось получить клиента фабрики соединений», что, в свою очередь, привело к другой ошибке «java.io.IOException: сервер вернул 3».

Причиной этого является то, что Google не удалось эффективно связаться со своей базой разработки, что во время разработки, то есть до подписания и выпуска приложения, вы должны подписать свое приложение с помощью ключа отладки, который используется во время тестирования.Для этого следуйте приведенному ниже методу, заменив [пароль] и [пароль ключа] своими собственными паролями.

Из своего каталога .android введите следующую команду:

keytool -list -alias androiddebugkey -keystore debug.keystore storepass [password] -keypass [key password]

Uponвыполнив все вышеперечисленное, вы будете рады получить ваш отпечаток сертификата MD5, который вы можете использовать для регистрации ключа API карт Google.Замените свой ключ API Карт Google в своем проекте, выполните очистку проекта и повторно запустите приложение.Теперь вы сможете просматривать свою карту Google и избавиться от досадных ошибок.

Как получить ключ API Google Maps для Android

4 голосов
/ 10 января 2012

Пожалуйста, убедитесь, что вы используете разрешения в вашем приложении AndroidManifest.xml.

добавить эти 3 строки в AndroidManifest.xml

<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"/>

А также убедитесь, что хранилище ключей указывает на созданное вами хранилище ключей.

В окне проверки затмения -> Настройки -> Android -> Сборка: хранилище ключей отладки по умолчанию, указывает на ключ, созданный вами с помощью keytool, в противном случае используйте кнопку Обзор и укажите фактический ключ.

2 голосов
/ 14 марта 2012

У меня была такая же проблема с «MapActivity Не удалось получить клиента фабрики соединений». Способ устранения проблемы был очень прост!Я просто удалил все приложение и переустановил его.Сработало !!!

2 голосов
/ 23 ноября 2011

Я столкнулся с той же проблемой, и проблема заключалась в том, что я пропустил, когда я установил соответствующий макет для MapActivity, код был

setContentView(R.layout.main);

файл макета main.xml не содержит никакого просмотра карты

стало

setContentView(R.layout.mapview) 

со следующим XML-кодом

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    <com.google.android.maps.MapView
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="YOU_API_KEY"
        />
</LinearLayout>

Карта работает прямо сейчас, надеюсь, это поможет

Также выможете проверить, добавили ли вы что-нибудь в макет вида карты, потому что добавление таких видов приведет к этой ошибке

0 голосов
/ 15 марта 2013

Кто-то там уже сказал это в комментарии: перезагрузите телефон.Или, если вы работаете в эмуляторе: перезапустите эмулятор.

0 голосов
/ 01 августа 2012

Кажется, есть много причин для этого. Я исправил это, изменив цель сборки моего проекта на api 10 (нажмите на проект / Свойства / Android) и затем запустил эмулятор на уровне API 15 (хотя и очень, очень медленно!).

0 голосов
/ 09 мая 2012

У меня была такая же проблема с ниже main.xml

<?xml version="1.0" encoding="utf-8"?>    
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <com.google.android.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:apiKey="Your API-KEY"
    />

</LinearLayout>

Затем я изменил main.xml , как показано ниже, проблема была решена

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:apiKey="Your API-KEY"
/>
...