DELPHI XE5-XE8 使用安卓的SharedPreferences封存小型数据

DELPHI XE5-XE8 使用安卓的SharedPreferences保存小型数据
习惯用INI保存小批量的数据的方法其实在安卓上也可以使用。但是更正宗的可能还是使用SharedPreferences。


SharedPreferences也是一种轻型的数据存储方式,
它的本质是基于XML文件存储key-value键值对数据,
通常用来存储一些简单的配置信息。
其存储位置在/data/data/<包名>/shared_prefs目录下。

Java 原型是这样的(网上随便搜的代码)
public class SharedPreferencesUtil { 
       
    //存储的sharedpreferences文件名 
    private static final String FILE_NAME = "save_file_name"; 
       
    /**
     * 保存数据到文件
     * @param context
     * @param key
     * @param data
     */ 
    public static void saveData(Context context, String key,Object data){ 
   
        String type = data.getClass().getSimpleName(); 
        SharedPreferences sharedPreferences = context 
                .getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE); 
        Editor editor = sharedPreferences.edit(); 
           
        if ("Integer".equals(type)){ 
            editor.putInt(key, (Integer)data); 
        }else if ("Boolean".equals(type)){ 
            editor.putBoolean(key, (Boolean)data); 
        }else if ("String".equals(type)){ 
            editor.putString(key, (String)data); 
        }else if ("Float".equals(type)){ 
            editor.putFloat(key, (Float)data); 
        }else if ("Long".equals(type)){ 
            editor.putLong(key, (Long)data); 
        } 
           
        editor.commit(); 
    } 
       
    /**
     * 从文件中读取数据
     * @param context
     * @param key
     * @param defValue
     * @return
     */ 
    public static Object getData(Context context, String key, Object defValue){ 
           
        String type = defValue.getClass().getSimpleName(); 
        SharedPreferences sharedPreferences = context.getSharedPreferences 
                (FILE_NAME, Context.MODE_PRIVATE); 
           
        //defValue为为默认值,如果当前获取不到数据就返回它 
        if ("Integer".equals(type)){ 
            return sharedPreferences.getInt(key, (Integer)defValue); 
        }else if ("Boolean".equals(type)){ 
            return sharedPreferences.getBoolean(key, (Boolean)defValue); 
        }else if ("String".equals(type)){ 
            return sharedPreferences.getString(key, (String)defValue); 
        }else if ("Float".equals(type)){ 
            return sharedPreferences.getFloat(key, (Float)defValue); 
        }else if ("Long".equals(type)){ 
            return sharedPreferences.getLong(key, (Long)defValue); 
        } 
           
        return null; 
    } 
   
}

  

DELPHI XE5以上的写法是这样的:(网上搜的,哈哈)
uses AndroidApi.Jni.JavaTypes, AndroidApi.Jni.App,AndroidApi.Jni.GraphicsContentViewText,FMX.Helpers.Android;
{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
  Prefs: JSharedPreferences;
  Editor: JSharedPreferences_Editor;
  I: Integer;
  F: Single;
  S: Jstring;
begin
  Prefs := SharedActivity.getPreferences(TJActivity.JavaClass.MODE_PRIVATE);
  Editor := Prefs.edit;
  Editor.putInt(StringToJString('MyIntKey'), 999);
  Editor.putFloat(StringToJString('MyFloatKey'), 123.456);
  Editor.putString(StringToJString('MyStrKey'), StringToJString('This is a test'));
  Editor.apply;
  I := Prefs.getInt(StringToJString('MyIntKey'), 0);
  F := Prefs.getFloat(StringToJString('MyFloatKey'), 0);
  S := Prefs.getString(StringToJString('MyStrKey'), StringToJString(''));
end;