Можно скромный вопрос? О каком приложении речь? А еще лучше было бы если бы вы показали информацию о ошибке, которую вам выдала ваша среда разработки...Digetix писал(а):Если из телефона удалить Сервисы Google Play, то приложение вылетает c NullPointer в onResume и onPause, почему так?
Урок 138. Определение местоположения. GPS координаты.
Re: Урок 138. Определение местоположения. GPS координаты.
Re: Урок 138. Определение местоположения. GPS координаты.
Сделал приложение по уроку. Всё как в урокеaltwin писал(а):Можно скромный вопрос? О каком приложении речь?
Re: Урок 138. Определение местоположения. GPS координаты.
причин может быть много, запустите приложение, когда оно завалится скопируйте то, что есть в окне LogCat и покажите тут. Т.е. eclipse(или любая другая среда) никогда не молчит, информация о ошибке есть там. В противном случае вам нужно обратиться к экстрасенсуDigetix писал(а):Сделал приложение по уроку. Всё как в урокеaltwin писал(а):Можно скромный вопрос? О каком приложении речь?
P.S. скорее всего вываливается при попытке обновить данные о локации, работа с которыми без этих сервисов не возможна у вас, а может возможно, но поскольку ранее запускали так - он теперь не может их найти, возможно поможет полное удаление папки .android(не помню как она называется в windows), но в любом случае, перед тем, как что -то делать нужно смотреть логи.
Re: Урок 138. Определение местоположения. GPS координаты.
На эмуляторе не валится. Валится на реальном устройстве.altwin писал(а):причин может быть много, запустите приложение, когда оно завалится скопируйте то, что есть в окне LogCat
01-02 23:15:13.349 E/AndroidRuntime(14005): FATAL EXCEPTION: main
01-02 23:15:13.349 E/AndroidRuntime(14005): java.lang.RuntimeException: Unable to resume activity {com.project.test/com.project.test.MainActivity}: java.lang.NullPointerException
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.os.Looper.loop(Looper.java:130)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.main(ActivityThread.java:3687)
01-02 23:15:13.349 E/AndroidRuntime(14005): at java.lang.reflect.Method.invokeNative(Native Method)
01-02 23:15:13.349 E/AndroidRuntime(14005): at java.lang.reflect.Method.invoke(Method.java:507)
01-02 23:15:13.349 E/AndroidRuntime(14005): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
01-02 23:15:13.349 E/AndroidRuntime(14005): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
01-02 23:15:13.349 E/AndroidRuntime(14005): at dalvik.system.NativeStart.main(Native Method)
01-02 23:15:13.349 E/AndroidRuntime(14005): Caused by: java.lang.NullPointerException
01-02 23:15:13.349 E/AndroidRuntime(14005): at com.project.test.MainActivity.onResume(MainActivity.java:110)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.Activity.performResume(Activity.java:3832)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2114)
01-02 23:15:13.349 E/AndroidRuntime(14005): ... 12 more
Re: Урок 138. Определение местоположения. GPS координаты.
покажите код, который у вас находится в 110 строке класса MainActivity(для наверняка можно и ту, которая перед ней.) В редакторе эклипса ctr+L чтобы переместиться к нужной линии.Digetix писал(а):На эмуляторе не валится. Валится на реальном устройстве.altwin писал(а):причин может быть много, запустите приложение, когда оно завалится скопируйте то, что есть в окне LogCat01-02 23:15:13.349 E/AndroidRuntime(14005): FATAL EXCEPTION: main
01-02 23:15:13.349 E/AndroidRuntime(14005): java.lang.RuntimeException: Unable to resume activity {com.project.test/com.project.test.MainActivity}: java.lang.NullPointerException
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.os.Handler.dispatchMessage(Handler.java:99)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.os.Looper.loop(Looper.java:130)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.main(ActivityThread.java:3687)
01-02 23:15:13.349 E/AndroidRuntime(14005): at java.lang.reflect.Method.invokeNative(Native Method)
01-02 23:15:13.349 E/AndroidRuntime(14005): at java.lang.reflect.Method.invoke(Method.java:507)
01-02 23:15:13.349 E/AndroidRuntime(14005): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
01-02 23:15:13.349 E/AndroidRuntime(14005): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
01-02 23:15:13.349 E/AndroidRuntime(14005): at dalvik.system.NativeStart.main(Native Method)
01-02 23:15:13.349 E/AndroidRuntime(14005): Caused by: java.lang.NullPointerException
01-02 23:15:13.349 E/AndroidRuntime(14005): at com.project.test.MainActivity.onResume(MainActivity.java:110)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.Activity.performResume(Activity.java:3832)
01-02 23:15:13.349 E/AndroidRuntime(14005): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2114)
01-02 23:15:13.349 E/AndroidRuntime(14005): ... 12 more
Re: Урок 138. Определение местоположения. GPS координаты.
altwin писал(а):покажите код, который у вас находится в 110 строке класса MainActivity(для наверняка можно и ту, которая перед ней.)
Код: Выделить всё
tvEnabledGPS = (TextView) findViewById(R.id.tvEnabledGPS);
tvStatusGPS = (TextView) findViewById(R.id.tvStatusGPS);
tvLocationGPS = (TextView) findViewById(R.id.tvLocationGPS);
tvEnabledNet = (TextView) findViewById(R.id.tvEnabledNet);
tvStatusNet = (TextView) findViewById(R.id.tvStatusNet);
tvLocationNet = (TextView) findViewById(R.id.tvLocationNet);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
}
}
@Override
protected void onResume() {
super.onResume();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000 * 10, 10, locationListener); // это 110 строка
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000 * 10, 10, locationListener);
checkEnabled();
}
@Override
protected void onPause() {
super.onPause();
locationManager.removeUpdates(locationListener);
}
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
locationListener или locationManager не инициализированы.
Re: Урок 138. Определение местоположения. GPS координаты.
предыдущий ответ правильный - просто добавьте проверку, т.е. if( locationManager){ do your code } else{ создайте объект locationManager и далее ваш код }.Digetix писал(а):altwin писал(а):покажите код, который у вас находится в 110 строке класса MainActivity(для наверняка можно и ту, которая перед ней.)Код: Выделить всё
tvEnabledGPS = (TextView) findViewById(R.id.tvEnabledGPS); tvStatusGPS = (TextView) findViewById(R.id.tvStatusGPS); tvLocationGPS = (TextView) findViewById(R.id.tvLocationGPS); tvEnabledNet = (TextView) findViewById(R.id.tvEnabledNet); tvStatusNet = (TextView) findViewById(R.id.tvStatusNet); tvLocationNet = (TextView) findViewById(R.id.tvLocationNet); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); } } @Override protected void onResume() { super.onResume(); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000 * 10, 10, locationListener); // это 110 строка locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000 * 10, 10, locationListener); checkEnabled(); } @Override protected void onPause() { super.onPause(); locationManager.removeUpdates(locationListener); }
P.S. хотя если честно я бы попробовал сделать так:
[syntax=java]
LocationManager mgr =
(LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
[/syntax]
вместо locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
P.S. теоретически, вы создали объект в onCreate, и не использовали до вызова onResume, возможно к тому времени он уже был удален.
Re: Урок 138. Определение местоположения. GPS координаты.
Возникла проблемка. Помогите, если можно. Получаю координаты, формирую стринг.
...............
String ltln = String.format("%1$.5f", location.getLatitude(), location.getLongitude());
...............
Теперь мне надо послать широковещательный запрос
...............
intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:"+ltln));
startActivity(intent);
................
И вот тут грабли. Дело в том, что в зависимости от локали, при выводе чисел с плавающей точкой, в качестве разделителя может выводиться как точка так и запятая.
53.89551,27.58708
53,89551,27,58708
У вас на скриншоте выводится точка (и тогда всё нормально, запрос пройдёт), у меня запятая и естественно координаты будут инвалидными, карта откроется но местоположение не покажет. Как обойти эту проблемму и в стринге, вне зависимости от локали, гарантированно получать точку ?
...............
String ltln = String.format("%1$.5f", location.getLatitude(), location.getLongitude());
...............
Теперь мне надо послать широковещательный запрос
...............
intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:"+ltln));
startActivity(intent);
................
И вот тут грабли. Дело в том, что в зависимости от локали, при выводе чисел с плавающей точкой, в качестве разделителя может выводиться как точка так и запятая.
53.89551,27.58708
53,89551,27,58708
У вас на скриншоте выводится точка (и тогда всё нормально, запрос пройдёт), у меня запятая и естественно координаты будут инвалидными, карта откроется но местоположение не покажет. Как обойти эту проблемму и в стринге, вне зависимости от локали, гарантированно получать точку ?
Re: Урок 138. Определение местоположения. GPS координаты.
метод replaceAll(), может получать регулярное выражение и соответственно заменить символ.
Re: Урок 138. Определение местоположения. GPS координаты.
Первое, что приходит в голову это принимать широту и долготу по отдельности
...........
String lt = String.format("%1$.5f", location.getLatitude());
String ln = String.format("%2$.5f", location.getLongitude());
...........
Затем проверяем на запятую и если она присутствует, меняем на точку
...........
if (lt.contains(",") & ln.contains(",")) {
ltw.setText(lt.replace(",", "."));
lnw.setText(ln.replace(",", "."));
// Здесь надо сделать преобразование в стринг и объединить String ltln
// Как это сделать ?
}
else {
ltln = lt + ln;
};
...........
String lt = String.format("%1$.5f", location.getLatitude());
String ln = String.format("%2$.5f", location.getLongitude());
...........
Затем проверяем на запятую и если она присутствует, меняем на точку
...........
if (lt.contains(",") & ln.contains(",")) {
ltw.setText(lt.replace(",", "."));
lnw.setText(ln.replace(",", "."));
// Здесь надо сделать преобразование в стринг и объединить String ltln
// Как это сделать ?
}
else {
ltln = lt + ln;
};
Re: Урок 138. Определение местоположения. GPS координаты.
что то вроде такого
[syntax=java5]
str.replaceAll("/.$/", ",");
[/syntax]
хотя лучше поискать в google regexp правильный.
[syntax=java5]
str.replaceAll("/.$/", ",");
[/syntax]
хотя лучше поискать в google regexp правильный.
Re: Урок 138. Определение местоположения. GPS координаты.
но вообще парить мозг регэкспами не обязательно - поместите строку в массив символов, если есть ',' - замените на '.' или наоборот и потом заберите свою строку назад.
Re: Урок 138. Определение местоположения. GPS координаты.
Ну вроде такой вариант.
.......
if (lt.contains(",") & ln.contains(",")) {
ltw.setText(lt.replace(",", "."));
lnw.setText(ln.replace(",", "."));
ltln=ltw.toString() + lnw.toString();
}
else {
ltln = lt + ln;
};
.......
Сейчас проверяю его.
.......
if (lt.contains(",") & ln.contains(",")) {
ltw.setText(lt.replace(",", "."));
lnw.setText(ln.replace(",", "."));
ltln=ltw.toString() + lnw.toString();
}
else {
ltln = lt + ln;
};
.......
Сейчас проверяю его.
Re: Урок 138. Определение местоположения. GPS координаты.
лучше использовать StringBuilder, но в принципе главное сейчас, чтобы работало.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 138. Определение местоположения. GPS координаты.
Ни разу не видел чтобы приходили данные с запятой, работая в разных локациях. А Вы уверены что это не ваши преобразования с форматом или еще чем? Вы пробовали выводить в лог до всяких преобразований?
Re: Урок 138. Определение местоположения. GPS координаты.
мне почему то сразу показалось, что это прикол какой -то китайской прошивкиm090050 писал(а):Ни разу не видел чтобы приходили данные с запятой, работая в разных локациях. А Вы уверены что это не ваши преобразования с форматом или еще чем? Вы пробовали выводить в лог до всяких преобразований?
Re: Урок 138. Определение местоположения. GPS координаты.
Вообще-то инициализированы. Я просто привелm090050 писал(а):locationListener или locationManager не инициализированы.
altwin писал(а):(для наверняка можно и ту, которая перед ней.)
Re: Урок 138. Определение местоположения. GPS координаты.
ответ уже был выше, каков результат после добавления if блока? То, что вы создали объект в onCreate ни о чем не говорит, после перехода приложения в состоянии паузы ваш объект мог как не используемый быть уничтожен сборщиком, потому -нужна проверка и если его нет - создать заново.Digetix писал(а):Вообще-то инициализированы. Я просто привелm090050 писал(а):locationListener или locationManager не инициализированы.altwin писал(а):(для наверняка можно и ту, которая перед ней.)
Re: Урок 138. Определение местоположения. GPS координаты.
Уверен. Выводил в лог. Данные приходят с запятой. Более того, если верить вики, то можно получить в зависимости от локали вообще хрен знает что "Вывод чисел с плавающей запятойm090050 писал(а):Ни разу не видел чтобы приходили данные с запятой, работая в разных локациях. А Вы уверены что это не ваши преобразования с форматом или еще чем? Вы пробовали выводить в лог до всяких преобразований?
В зависимости от текущей локали, при выводе чисел с плавающей запятой может использоваться как запятая, так и точка (а, возможно, и другой символ). Поведение printf в отношении разделяющего дробную и целую часть числа символа определяется использующейся локалью (точнее, переменной LC NUMERIC).[15]"