共享首选项仅存储字符串 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 的值(最后写在该键上的内容)。
所以,我一直在将一些坐标保存到 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 的值(最后写在该键上的内容)。