java - 无法导入 SharedPreferences

标签 java android import sharedpreferences reload

替换 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/

相关文章:

java - 字符串之间的区别!和 Kotlin 中的字符串

c++ - 将 .lib 导入另一个项目时出现问题

Python3 - 导入和重写方法

java - Hibernate延迟加载的理论问题

java - 在 Android 中检索应用程序包和版本

java - 使用 Xposed Framework Hook BroadcastReceiver

java - 调用函数时 JNI C++ android 应用程序崩溃

python - 在python中导入模块时加载文件失败

java - 很难理解使用 JPA (spring boot) 的关系数据存储

java - 如何检查十六进制字符串中是否设置了位?