我有一个带有选择模式的列表视图,并且它正常工作。我想将该选中的项目保存到共享首选项,然后在另一个活动中使用它。但是,我的SharedPreferences没有保存我的字符串正确,并保存另一个文件调用DATA_Preferences我从未在我的代码中调用。 结果是我的Next活动得到了错误的值..
这是我的代码,用于保存我的字符串并将其称为另一个活动:
public void onClick(View v) {
SparseBooleanArray checked = listView.getCheckedItemPositions();
ArrayList<DBLokasi> selectedItems = new ArrayList<DBLokasi>();
// Item position in adapter
SharedPreferences prefs = getSharedPreferences("DATA_COOR", Context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = prefs.edit();
for (int i = 0; i < checked.size(); i++) {
int position = checked.keyAt(i);
// Add slected if truee
if (checked.valueAt(i))
selectedItems.add(adapter.getItem(position));
prefsEditor.putFloat(POINT_LATITUDE_KEY + i, Float.parseFloat(values.get(position).getLat()));
prefsEditor.putFloat(POINT_LONGITUDE_KEY + i, Float.parseFloat(values.get(position).getLng()));
}
prefsEditor.commit();
String[] outputStrArr = new String[selectedItems.size()];
for (int i = 0; i < selectedItems.size(); i++) {
outputStrArr[i] = String.valueOf(selectedItems.get(i));
}
Bundle b = new Bundle();
Location location = new Location("POINT_LOCATION");
for (int i = 0; i < checked.size(); i++) {
location.setLatitude(prefs.getFloat(POINT_LATITUDE_KEY + i, 0));
location.setLongitude(prefs.getFloat(POINT_LONGITUDE_KEY + i, 0));
double latitude = prefs.getFloat(POINT_LATITUDE_KEY + i, 0);
double longitude = prefs.getFloat(POINT_LONGITUDE_KEY + i, 0);
prefsEditor.commit();
b.putDouble("Latitude" + i, latitude );
b.putDouble("Longitude" + i, longitude);
}
int banyakPilih = checked.size();
b.putInt("banyakPilih", banyakPilih);
Intent intent = new Intent(getApplicationContext(),
HasilPilihanActivity.class);
// Create a bundle object
b.putStringArray("selectedItems", outputStrArr);
// Add the bundle to the intent.
intent.putExtras(b);
// start the ResultActivity
startActivity(intent);
}
我将我的Prefernces保存在DATA_COOR.xml文件名中,它保存了我的字符串,但我得到了另一个文件,用我的资源管理器中的文件名DATA_Preferences保存我的偏好。有些人可以给我解决方案?在此之前谢谢..
答案 0 :(得分:0)
定义私人SharedPreferences mediaPrefs = null;
将它放在构造函数mediaPrefs = this.getSharedPreferences("Testing", 1);
将以下方法放在来源:
public void storeStateString(String prefsKeys, Float prefsValue) {
SharedPreferences.Editor prefEditor = mediaPrefs.edit();
prefEditor.putFloat(prefsKeys, prefsValue);
prefEditor.commit();
}
使用此方法存储状态,如:
storeStateString("POINT_LATITUDE_KEY"+i,Float.parseFloat(values.get(position).getLat()));
现在您可以通过以下方式获得此偏好:
Float finalValue = mediaPrefs.getFloat("POINT_LATITUDE_KEY1","2.0l");
其中2.0l是defalut值,如果mediaPrefs为null;
如果有任何相关问题,请与我联系。