Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Мобильные ОС (Android, iOS, Windows Phone)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2013, 19:09   #1
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 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. Английского я не знаю.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 30.09.2013, 03:02   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Очень плохой код, но логика присутствует и должно работать. По крайней мере читать и писать параметр t типа long у вас получилось. Чтобы быть более четкими, прошу описать вопрос "выводит старые данные", не совсем ясно какие именно.
BOBAH13 вне форума Ответить с цитированием
Старый 30.09.2013, 03:43   #3
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Очень плохой код
Это лишь часть...я неделю примерно по часу сижу изучаю яву и андроид, просто надо написать приложение(неважно как лишь бы работало правильно).
Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
логика присутствует и должно работать
Вот именно.
Короче запускаю приложение, сервис не запущен, нажимаю кнопку всё по нулям, запускаю сервис, получаю сообщение что данные обновлены, нажимаю кнопку, показывает что всё по нулям(хотя должно быть иначе), закрываю приложение(домик,домик зажал, свайп на приложении)),сервис работает, запускаю приложение, нажимаю кнопку, выводит данные правильные(пусть будет данные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);
	   	}
Сервис правильные данные выдаёт, а кнопка нет. Но чудес-то не бывает.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 01.10.2013, 01:25   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Попробуйте использовать Context.MODE_PRIVATE вместо Context.MODE_APPEND.

p.s. хотя замените commit на apply хоть бы что-то сделайте красиво
BOBAH13 вне форума Ответить с цитированием
Старый 01.10.2013, 02:12   #5
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Попробуйте использовать Context.MODE_PRIVATE вместо Context.MODE_APPEND.
Пробовал, как раз изначально было MODE_PRIVATE(экспериментировал), толку нет, если кто готов помочь могу в личку скинуть проект. Я просто не представляю из-за чего такое может быть.
Apply тоже не помогает.
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.

Последний раз редактировалось Deight; 01.10.2013 в 02:19.
Deight вне форума Ответить с цитированием
Старый 01.10.2013, 05:32   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Я использую метод (редко), который точно поможет решить проблему. Изолируйте ваш код, сделайте его маленьким, читабельным, как в вашем примере. Это автоматически решит вашу проблему если нет, то пожалуйста представьте код здесь, а еще лучше попробуйте написать пример код (другое приложение), которое будет выполнять сохранение и считывание данных. Если и это вам не поможет и не будет работать, тогда давайте сюда )))
BOBAH13 вне форума Ответить с цитированием
Старый 02.10.2013, 01:37   #7
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 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>
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 02.10.2013, 01:59   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Зачем? Уберите android: process=":remote" из OnAlarmReceiver
BOBAH13 вне форума Ответить с цитированием
Старый 02.10.2013, 12:51   #9
Deight
Бредовый
Форумчанин
 
Аватар для Deight
 
Регистрация: 15.11.2008
Сообщений: 285
Радость

О спасибо, теперь всё ок (копипаст не тру). А для чего нужен параметр android: process и что даёт значение :remote.
А ещё, вот устанавливает пользователь приложение, нажимает не открыть а готово и после перезагрузки BOOT_COMPLETED не отлавливается (соответственно сервис не запускается), а если хоть раз откроет приложение то всё будет ок.
Так вот вопрос можно ли сделать так что бы после установки (даже если пользователь нажмёт домик или стрелку или готово) сразу запускался сервис, или хотя бы после перезагрузки (не разу не открывая приложение).
Чем точнее и проще задан вопрос, тем проще на него получить точный ответ.
Deight вне форума Ответить с цитированием
Старый 02.10.2013, 21:48   #10
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

ну так ведь нужно писать понимая, а иначе чего вы ожидаете, все само заработает как вы хотите?

После установки запустить не получиться. После перезагрузки, получится, у вас уже есть BOOT_COMPLETED ресивер как я понял.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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