共享首选项仅存储字符串 return 的一部分

Shared preferences storing a string return only a part of it

所以,我一直在将一些坐标保存到 SharedPreferences 中,但是当我尝试取回它们时,latitude returns 很好:44.374736436 ,但 longitude returns 仅 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 class:

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 returns 2 个元素,第一个是正确的 latitude,但第二个 returns 只有 26,而不是 26.242423432

验证 KEY_longitudine 和 KEY_id_marker 的首选项键值是否相同。

如果两个键相同,id 的值将在经度上被覆盖。在检索经度值的同时,您将获得 id 的值(最后写在该键上的内容)。