FATAL EXCEPTION: ZoomTableManager
Я получаю странный крах, и у меня возникли проблемы с поиском чего-либо об этом в Google. Поиск ZoomTableManager не возвращает никаких результатов.
E/AndroidRuntime﹕ FATAL EXCEPTION: ZoomTableManager
Process: com.xxx.yyy, PID: 22129
java.lang.IllegalMonitorStateException: object not locked by thread before notify()
at java.lang.Object.notifyAll(Native Method)
at com.google.maps.api.android.lib6.gmm6.m.k.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.m.l.run(Unknown Source)
Ответы
Ответ 1
Выяснилось, что причиной ошибки был недействительный ключ API Карт Google.
Недавно нам пришлось изменить имя нашего приложения, и поэтому используемые нами ключи API стали недействительными, так как вы должны указать разрешенные приложения подписи и имени пакета.
Ответ 2
A IllegalMonitorStateException
с этим сообщением происходит, когда вы вызываете obj.notify()
, и вы не держите примитивный мьютекс для obj
.
Вы должны сделать что-то вроде этого:
synchronized (someObj) {
...
someObj.notify();
...
}
или эквивалент, но по некоторым причинам код, вызывающий проблему, оставил бит synchronized
. (Или, может быть, он синхронизирован на другом объекте.)
К сожалению, это происходит в некотором запутанном коде, который обеспечивает реализацию API Карт Google. И вы не указали никакого контекста. Поэтому нам почти невозможно понять, что происходит.
Я предлагаю вам предоставить более подробную информацию.
Ответ 3
Способом устранения этой проблемы является обращение к открытому ключу карты Google для вашего пакета.
Но способ предотвратить этот сбой - проверить возвращаемое значение вызывающего mapFragment = new MapFragment()
и не вызывать fm.beginTransaction().replace(id, mapFragment).commit();
, если mapFragment равен null.
Надеюсь, что это поможет.
Ответ 4
В нашем случае изменился ключ, используемый для подписи приложения Android (а не ключа API).
Прежде чем мы использовали производственный ключ (хранящийся в хранилище ключей). Этот ключ был включен в консоли Google API (https://console.developers.google.com).
Мы создали новую среду разработки на новой машине и эта машина не использовала производственный ключ, как и раньше, но использовала ключ отладки по умолчанию для Android (хранилась в хранилище отладки по умолчанию в android default/.android/debug. хранилище ключей).
Решение заключалось в том, чтобы настроить ключ отладки по умолчанию для Android, SHA1 и имя пакета в консоли Google API.
-
Получить SHA1:
keytool -v -list -keystore $HOME/.android/debug.keystore
-
Скопируйте SHA1: 27: 4C: CF: A3: E9: 75: 4A: 59: 4C: EE: 50: 21: 2B: 1C: 7B: 48: FC: 45: 4F: 77
-
Перейдите в Консоль API Google и введите имя пакета SHA1: (в APIS и Auth > Учетные данные > Изменить разрешенные приложения для Android):
27: 4C: КФ: А3: Е9: 75: 4A: 59: 4C: EE: 50: 21: 2B: 1C: 7B: 48: ФК: 45: 4F: 77; com.mypackage.name
Наслаждайтесь!