|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.09.2013, 19:09 | #1 |
Бредовый
Форумчанин
Регистрация: 15.11.2008
Сообщений: 285
|
Android(getSharedPreferences не обновляет данные)
Я новичек в программировании для android.
Логика такая: есть два окна(layout) на одном кнопка на другом настройки. Подключил сервис который запускается вместе с андроидом и запускает таймер OnAlarmReceiver extends BroadcastReceiver Который через заданный период времени включает gps сохраняет координаты Код HTML:
public void onLocationChanged(Location location) { Editor ed = context8.getSharedPreferences("coordinates",Context.MODE_APPEND).edit(); ed.putString("x", ""+location.getLatitude()); ed.putString("y", ""+location.getLongitude()); ed.putString("s", ""+location.getSpeed()); ed.putLong("t", location.getTime()); ed.commit(); myManager.removeUpdates(this); } На главном окне одна кнопка по нажатию на которую данные должны считаться Код HTML:
public void onClick(View v) { if (((ToggleButton)v).isChecked()) { SaPr=getSharedPreferences("coordinates",MODE_APPEND); DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); String strDate = df.format(new Date(SaPr.getLong("t", 0))); Toast.makeText(MyActivity.this, SaPr.getString("x", "0")+"\n"+SaPr.getString("y", "0")+"\n" +SaPr.getString("s", "0")+"\n"+strDate, Toast.LENGTH_LONG).show(); }else { } } Подскажите что делать. Я даже не знаю как в google написать P.S. Английского я не знаю.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
|
30.09.2013, 03:02 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Очень плохой код, но логика присутствует и должно работать. По крайней мере читать и писать параметр t типа long у вас получилось. Чтобы быть более четкими, прошу описать вопрос "выводит старые данные", не совсем ясно какие именно.
|
30.09.2013, 03:43 | #3 |
Бредовый
Форумчанин
Регистрация: 15.11.2008
Сообщений: 285
|
Это лишь часть...я неделю примерно по часу сижу изучаю яву и андроид, просто надо написать приложение(неважно как лишь бы работало правильно).
Вот именно. Короче запускаю приложение, сервис не запущен, нажимаю кнопку всё по нулям, запускаю сервис, получаю сообщение что данные обновлены, нажимаю кнопку, показывает что всё по нулям(хотя должно быть иначе), закрываю приложение(домик,домик зажал, свайп на приложении)),сервис работает, запускаю приложение, нажимаю кнопку, выводит данные правильные(пусть будет данные1),жду пока таймер сработает,таймер срабатывает,нажимаю кнопку, а данные выводятся такие как и в прошлый раз выводились(данные1) и сколько не нажимай будут ваводиться данные1 пока не перезапустишь приложение. Решил проверить(log-ами я пользоваться не умею и времени нет разбираться.) Код HTML:
public void onLocationChanged(Location location) { Editor ed = context8.getSharedPreferences("coordinates",Context.MODE_APPEND).edit(); ed.putString("x", ""+location.getLatitude()); ed.putString("y", ""+location.getLongitude()); ed.putString("s", ""+location.getSpeed()); ed.putLong("t", location.getTime()); ed.commit(); SharedPreferences sp = context8.getSharedPreferences("coordinates",Context.MODE_APPEND); Toast.makeText(context8,"Широта: " + sp.getString("x", "0") + "\nДолгота: " + sp.getString("y", "0") + "\nСкорость: " + sp.getString("s", "0") + "\n" , Toast.LENGTH_LONG).show(); myManager.removeUpdates(this); }
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
|
01.10.2013, 01:25 | #4 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Попробуйте использовать Context.MODE_PRIVATE вместо Context.MODE_APPEND.
p.s. хотя замените commit на apply хоть бы что-то сделайте красиво |
01.10.2013, 02:12 | #5 | |
Бредовый
Форумчанин
Регистрация: 15.11.2008
Сообщений: 285
|
Цитата:
Apply тоже не помогает.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Последний раз редактировалось Deight; 01.10.2013 в 02:19. |
|
01.10.2013, 05:32 | #6 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Я использую метод (редко), который точно поможет решить проблему. Изолируйте ваш код, сделайте его маленьким, читабельным, как в вашем примере. Это автоматически решит вашу проблему если нет, то пожалуйста представьте код здесь, а еще лучше попробуйте написать пример код (другое приложение), которое будет выполнять сохранение и считывание данных. Если и это вам не поможет и не будет работать, тогда давайте сюда )))
|
02.10.2013, 01:37 | #7 |
Бредовый
Форумчанин
Регистрация: 15.11.2008
Сообщений: 285
|
Может в манифесте я что не так написал. Ещё возникает ошибка когда я пытаюсь считать настройки при BOOT_COMPLETED.
Код HTML:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ru.example.vostok" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="ru.example.vostok.MyActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="ru.example.vostok.OnAlarmReceiver" android:enabled="true" android:process=":remote" /> <receiver android:name="ru.example.vostok.OnBootReceiver" android:enabled="true" android:exported="false" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> <service android:name="ru.example.vostok.ServiceExample" android:enabled="true" /> <activity android:name="ru.example.vostok.MyAktivity1" android:label="@string/action_settings" > </activity> <activity android:name="ru.example.vostok.MyActivity1" android:label="@string/action_settings" android:parentActivityName="MyActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="MyActivity" /> </activity> </application> </manifest>
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
|
02.10.2013, 01:59 | #8 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Зачем? Уберите android: process=":remote" из OnAlarmReceiver
|
02.10.2013, 12:51 | #9 |
Бредовый
Форумчанин
Регистрация: 15.11.2008
Сообщений: 285
|
О спасибо, теперь всё ок (копипаст не тру). А для чего нужен параметр android: process и что даёт значение :remote.
А ещё, вот устанавливает пользователь приложение, нажимает не открыть а готово и после перезагрузки BOOT_COMPLETED не отлавливается (соответственно сервис не запускается), а если хоть раз откроет приложение то всё будет ок. Так вот вопрос можно ли сделать так что бы после установки (даже если пользователь нажмёт домик или стрелку или готово) сразу запускался сервис, или хотя бы после перезагрузки (не разу не открывая приложение).
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
|
02.10.2013, 21:48 | #10 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
ну так ведь нужно писать понимая, а иначе чего вы ожидаете, все само заработает как вы хотите?
После установки запустить не получиться. После перезагрузки, получится, у вас уже есть BOOT_COMPLETED ресивер как я понял. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi-7. PopupMenu не обновляет свою ширину. | pro5 | Общие вопросы Delphi | 1 | 20.12.2012 09:48 |
Word долго обновляет связи с Excel | ZSFoS | Microsoft Office Word | 1 | 26.12.2011 12:59 |
TcxGrid.DataController не обновляет данные в связанном DataSet | delphicoding | Общие вопросы Delphi | 2 | 08.12.2011 18:13 |
MySQL обновляет таймстемп, который не надо обновлять | Reebka | PHP | 3 | 22.09.2011 16:32 |