替换 SharedPreferences 文件后,我无法加载新的 SharedPreferences 文件。重新安装应用程序后就可以工作了。重新启动应用程序后,没有任何变化。
这是导入/导出类:
public class Prefs {
private String PrefsDir = "/data/%packagename%/shared_prefs/";
private String ExportDir = "/";
private SharedPreferences _sharedPrefs;
private SharedPreferences.Editor _prefsEditor;
private Context context;
Prefs(Context context, String form) {
this.ExportDir = Environment.getExternalStorageDirectory().getPath() + ExportDir;
this.PrefsDir = Environment.getDataDirectory().getPath() + PrefsDir;
_sharedPrefs = context.getSharedPreferences(form, Activity.MODE_PRIVATE);
_prefsEditor = _sharedPrefs.edit();
}
private boolean copyfile(String srFile, String dtFile){
Popup.log("srFile = "+srFile);
Popup.log("dtFile = "+dtFile);
try{
File f1 = new File(srFile);
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0){
out.write(buf, 0, len);
}
in.close();
out.close();
} catch(FileNotFoundException ex) {
Popup.popup(context, "File not found");
Popup.log(ex.getMessage());
return false;
} catch(IOException e) {
Popup.popup(context, "IO Error");
return false;
}
return true;
}
boolean Export(String form) {
return copyfile(PrefsDir+form+".xml", ExportDir+form+".xml");
}
boolean Import(String form) {
return copyfile(ExportDir+form+".xml", PrefsDir+form+".xml");
}
}
对不起我的英语
最佳答案
我的实现的第一部分包括定义用于检索共享首选项的键的声明,当然还有它们可以存储到的变量。 第一个例程是初始化共享首选项(为了加载共享首选项,您需要在代码中保存要保存的值,因此您需要一些代码来初始化代码中的这些值)。 第二个例程是保存共享首选项。 第三个例程是加载共享首选项。
这是关键定义部分
private SharedPreferences sharedPreferences;
public final static String MARV_INIT = "MARV_INIT";
public final static String MARV_LAT = "MARV_LATITUDE";
public final static String MARV_LON = "MARV_LONGITUDE";
public final static String MARV_ZOOM = "MARV_ZOOM";
public final static String MARV_PDFL = "MARV_PDFL";
public final static String MARV_PRON = "MARV_PRON";
public final static String MARV_LTRD = "MARV_LTRD";
这是 3 个例程。
// Shared Preferences and other data loading routines for this activity
private void initSharedPreferences() {
Log.i(TAG, "Initializing shared preferences ...");
Editor editor = sharedPreferences.edit();
editor.putInt(MARV_INIT, 1);
editor.putString(MARV_LAT, ((Double) SG_LATITUDE).toString());
editor.putString(MARV_LON, ((Double) SG_LONGITUDE).toString());
editor.putFloat(MARV_ZOOM, (float) DEFAULT_ZOOM);
editor.putString(MARV_PDFL, getString(R.string.default_poi_list));
editor.putBoolean(MARV_PRON, true);
editor.putFloat(MARV_LTRD, (float) LocationAlertService.DEFAULT_RADIUS);
editor.commit();
}
private void saveSharedPreferences() {
// Update global variables first
updateCameraProperties();
// Now save global variables into shared preferences
Editor editor = sharedPreferences.edit();
editor.putString(MARV_LAT,
((Double) lastCameraPosition.latitude).toString());
editor.putString(MARV_LON,
((Double) lastCameraPosition.longitude).toString());
editor.putFloat(MARV_ZOOM, lastCameraZoom);
editor.putString(MARV_PDFL, poiDocFileListUrl);
editor.putBoolean(MARV_PRON, proximityAlertsOn);
editor.putFloat(MARV_LTRD, lastRadiusUsed);
editor.commit();
}
private void loadSharedPreferences() {
lastCameraPosition = new LatLng(Double.parseDouble(sharedPreferences
.getString(MARV_LAT, ((Double) SG_LATITUDE).toString())),
Double.parseDouble(sharedPreferences.getString(MARV_LON,
((Double) SG_LONGITUDE).toString())));
lastCameraZoom = sharedPreferences.getFloat(MARV_ZOOM, DEFAULT_ZOOM);
poiDocFileListUrl = sharedPreferences.getString(MARV_PDFL,
getString(R.string.default_poi_list));
proximityAlertsOn = sharedPreferences.getBoolean(MARV_PRON, true);
lastRadiusUsed = sharedPreferences.getFloat(MARV_LTRD, LocationAlertService.DEFAULT_RADIUS);
}
关于java - 无法导入 SharedPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17640346/