Общие настройки, хранящие строку, возвращают только ее часть - PullRequest
0 голосов
/ 27 марта 2020

Итак, я сохранил некоторые координаты в SharedPreferences, но когда я пытаюсь вернуть их, latitude возвращается нормально, как: 44.374736436, но longitude возвращает только 26, даже когда я сохраняю его, я сохраняю его как: 26.24343343. Где я его сохраняю:

 PunctSalvat_SP punct = new PunctSalvat_SP(
                            String.valueOf(latitudine_start),
                            String.valueOf(longitudine_start),
                            id_alerta
                    );
 SharedPrefManager.getInstance(getApplicationContext()).SalvarePunct(punct);

SharedPreferences.SalvarePunct ():

public void SalvarePunct(PunctSalvat_SP punctSalvat) {
    SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_PUNCT, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(KEY_latitudine, punctSalvat.getLatitudine());
    editor.putString(KEY_longitudine, punctSalvat.getLongitudine());
    editor.putString(KEY_id_marker, punctSalvat.getid());
    editor.apply();
}

Класс PunctSalvat_SP:

public class PunctSalvat_SP {
private String latitudine, longitudine, id;

public PunctSalvat_SP(String latitudine, String longitudine, String id) {
    this.latitudine = latitudine;
    this.longitudine = longitudine;
    this.id = id;
}


public String getLatitudine() {
    return latitudine;
}
public String getLongitudine() {
    return longitudine;
}
public String getid() {
    return id;
}

}

Где я попробуйте получить его обратно:

 if (SharedPrefManager.getInstance(this).ExistaPunct()) {
            ArrayList<String> punct_ramas_in_memorie = new ArrayList<String>();
            PunctSalvat_SP punct = SharedPrefManager.getInstance(this).getPunct();
            punct_ramas_in_memorie.add(punct.getLatitudine());
            punct_ramas_in_memorie.add(punct.getLongitudine());
            ruta_pentru_o_problema_id.add(punct.getid());
            CrearePunctDinRuta(punct_ramas_in_memorie);
        }

SharedPreferences.ExistaPunct () и SharedPreferences.getPunct ():

public boolean ExistaPunct() {
    SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_PUNCT, Context.MODE_PRIVATE);
    return (sharedPreferences.getString(KEY_latitudine, null) != null && sharedPreferences.getString(KEY_longitudine, null) != null);
}
public PunctSalvat_SP getPunct() {
    SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_PUNCT, Context.MODE_PRIVATE);
    return new PunctSalvat_SP(
            sharedPreferences.getString(KEY_latitudine, null),
            sharedPreferences.getString(KEY_longitudine, null),
            sharedPreferences.getString(KEY_id_marker, null)
    );
}

Отладка кода, я заметил следующее: Когда я сохраняю его, punct имеет правильное значение (например: punct = (44.3432432423, 26.1323232, 26)), но когда я пытаюсь вернуть его, arraylist punct_ramas_in_memorie возвращает 2 элемента, 1-й является правильным latitude, а 2-й возвращает только 26 вместо 26.242423432.

1 Ответ

1 голос
/ 27 марта 2020

Проверьте значения ключа предпочтения для KEY_longitudine и KEY_id_marker, если они совпадают.

Если оба ключа совпадают, значение id будет переопределено по долготе. и при получении значения долготы вы получите значение id (что было написано в последнюю очередь на этом ключе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...