Costin
Costin

Reputation: 224

Shared preferences storing a string return only a part of it

So, I've been saving some coordinates into a SharedPreferences, but when I try to get them back, the latitude returns fine like :44.374736436, but the longitude returns only 26, even though when I save it, I store it like: 26.24343343. Where I save it:

 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;
}

}

Where I try to get it back:

 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() and 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)
    );
}

Debuggind the code, I observed the following: When I save it, the punct has the right value (Ex: punct = (44.3432432423, 26.1323232, 26)), but when I try to get it back, the arraylist punct_ramas_in_memorie returns 2 elements, the 1st being the right latitude, but the 2nd one returns only 26, instead of 26.242423432.

Upvotes: 0

Views: 29

Answers (1)

Nilesh B
Nilesh B

Reputation: 967

Verify preference key values for KEY_longitudine and KEY_id_marker, if they are same.

If both key are same the value of id will overridden on longitude. and while retrieving value of longitude you will get value of id(what was written lastly on that key).

Upvotes: 1

Related Questions