2013-07-14 37 views
1

SharedPreferences的替换文件后,我可以不加载新的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"); 
    } 
} 

对不起了我的英语

回答

0

我实施的第一部分包括定义用于检索共享偏好的按键和声明当然他们可以存储到变量。 第一个例程是初始化共享偏好(以加载共享偏好,U必须的代码值来保存这样u需要一些代码中的代码来初始化这些值)。 第二个例程是保存共享首选项。 第三个例程是加载共享首选项。

这是关键的定义部分

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