2016-12-05 3 views
0

Я пишу приложение для эмуляции инструмента для мониторинга окружающей среды с использованием GPSinformation для моделирования данных измерений (https://github.com/sickel/measem). В этом приложении я хочу, чтобы пользователь мог определить точечный источник в определенном месте. Lat/lon этого местоположения должен храниться в общих предпочтениях. Точка должна быть определена путем ввода параметров lat и lon в настройках (с использованием API-интерфейсов предпочтений) или путем повторного включения gpslocation. Часть с настройками работает отлично, я также могу читать в местоположении из gps, но этот набор данных перезаписывается данными в редакторе предпочтений, как только приложение приостанавливается.Сохраненные сохраненные настройки

Мой код для хранения значений:

SharedPreferences sp=this.getPreferences(Context.MODE_PRIVATE); 
SharedPreferences.Editor ed=sp.edit(); 
ed.putString("Latitude",lat); 
ed.putString("Longitude",lon); 
ed.apply(); 

Я также попытался ed.commit(); в дополнение к приложению, но с тем же результатом. Как я могу обновить то, что видно из редактора настроек, с тем, что я здесь храню?

Мои OnPause ничего не делает с предпочтениями, он просто делает некоторое другое домашнее хозяйство:

public void onPause() { 
    super.onPause(); 
    timer.cancel(); 
    timer.purge(); 
    h2.removeCallbacks(run); 
    Button b = (Button)findViewById(R.id.button); 
    b.setText("start"); 
} 

Я устанавливаю значение от предпочтений в этой функции

private void readPrefs(){ 
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    String ret=sharedPref.getString("Latitude", "1"); 
    Double lat= Double.parseDouble(ret); 
    ret=sharedPref.getString("Longitude", "1"); 
    Double lon= Double.parseDouble(ret); 
    there.setLatitude(lat); 
    there.setLongitude(lon); 
} 

Это неоспоримое вызываются из onResume () и onActivityResult(). Я использую SettingsFragment для меню настроек.

+0

введите код своей деятельности, определяющий метод onPause/Ondestro –

+1

Можете ли вы провести эксперимент и сохранить их с разными именами? возможно, эти значения написаны в onPause/onDestroy в вашем приложении или в третьей стороне – petrumo

+0

@Divyesh, см. обновление. OnPause не касается предпочтений ... Я думал, они должны были быть сохранены с apply() или commit()? – MortenSickel

ответ

1

getPreferences в docs:

считывает SharedPreferences объект для доступа к предпочтениям, которые частные к этой деятельности. Это просто вызывает метод getSharedPreferences (String, int), передав в качестве имени предпочтений имя этого класса .

Поскольку вы пытаетесь получить их в разных видах деятельности, я подозреваю, что вы на самом деле ссылаетесь на два разных общих предпочтения, то есть два разных файла. Поэтому я предлагаю вам использовать тот же метод, чтобы получить экземпляр SharedPreferences при получении и при установке. PreferenceManager.getDefaultSharedPreferences(context) должен выполнить работу, а также context.getPreferences("NAME", Context.MODE_PRIVATE). Если вы собираетесь на второй, я предлагаю сохранить имя в качестве ресурса, чтобы убедиться, что он согласован.

+0

Это имеет смысл. Я займусь этим. – MortenSickel

+0

Это было так просто, когда я только это понял .. – MortenSickel