Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 444
07.11.2017, 17:42  [ТС] 1
Author24 — интернет-сервис помощи студентам
Здравствуйте,

вот есть код в потоке thread, и когда доходит до перерисовки графического интерфейса, то приложение вылетает с ошибкой.
Если убрать поток, то работает нормально.

Как правильно реализовать следующий код в потоке, чтобы он работал?


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void getAddressFromLocation(final String locationAddress,
                                            final Context context, final Handler handler) {
            Thread thread = new Thread() {
                @Override
                public void run() {
                    Geocoder geocoder = new Geocoder(context, Locale.getDefault());
                    try {
                        List<Address> addressList = geocoder.getFromLocationName(locationAddress, 1);
                        if (addressList != null && addressList.size() > 0) {
                            Address address = addressList.get(0);
                            LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
                            mapsActivity.mMap.addMarker(new MarkerOptions().position(latLng).title("Marker"));  // Тут вылетает ошибка 
                            mapsActivity.mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
                        }
                    } catch (IOException e) {
                       //Log
                    }
                }
            };
            thread.start();
        }
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
07.11.2017, 17:46 2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    private void getAddressFromLocation(final String locationAddress, final Context context) {
        Thread thread = new Thread() {
            @Override
            public void run() {
                Geocoder geocoder = new Geocoder(context, Locale.getDefault());
                try {
                    final List<Address> addressList = geocoder.getFromLocationName(locationAddress, 1);
                    if (addressList != null && !addressList.isEmpty()) {
                        new Handler(Looper.getMainLooper()).post(new Runnable() {
                            @Override
                            public void run() {
                                Address address = addressList.get(0);
                                LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
                                mapsActivity.mMap.addMarker(new MarkerOptions().position(latLng).title("Marker")); 
                                mapsActivity.mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
                            }
                        });
                    }
                } catch (IOException e) {
                    //Log
                }
            }
        };
        thread.start();
    }
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
08.11.2017, 16:24 3
Geocoder - не надежная херня.

Постоянные ошибки типа Service Unable, на некоторых устройствах вообще не работает..

надежнее напрямую на api гугла или osm запросы отправлять..
0
2 / 2 / 2
Регистрация: 29.09.2012
Сообщений: 444
08.11.2017, 17:48  [ТС] 4
ILNAR_93
спасибо за подсказку, а есть примерчик как сделать нормальный поиск?
0
Android
245 / 242 / 52
Регистрация: 19.01.2013
Сообщений: 1,896
Записей в блоге: 3
08.11.2017, 21:21 5
https://developers.google.com/... ding/start
0
08.11.2017, 21:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2017, 21:21
Помогаю со студенческими работами здесь

Ошибка в потоке
procedure TMyThread.Execute; begin response:=send('GET',...

Delphi. Ошибка в потоке
Здравствуйте. Такая штука. Не могу понять в чем проблема. В программе создаю поток, и все норм. Но...

В чем ошибка в файловом потоке?
Есть программа. В файле borders.in такой текст: 6 6 2 1 1 4 4 3 3 6 6 . В файл borders.out...

Ошибка при работе в потоке
Писал софт с использованием многопоточности. В процедуре потока Execute возникла небольшая...

Управление потоками. Изменение значения label (созданного в потоке 1) в потоке 2
Код таков: using System; using System.Collections.Generic; using System.ComponentModel; using...

Как получить значение переменной созданной в потоке, в другом потоке?
Добрый день :) Возник такой вопрос &quot;как получить значение переменной созданной в потоке, в другом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru