在原生android中是否有Sharedpreference的替代方案?

时间:2016-10-19 12:18:26

标签: android android-ndk sharedpreferences android-sharedpreferences persistent-storage

我的要求是将数据持久存储在本机android可执行文件中。数据是原始类型。我可以在可执行文件中使用SharedPreferences吗?如果是,那怎么样?如果没有,那么是否有任何替代方法可以持久存储原生端android?

我不想在本机端或任何文件操作中使用SQLite。

感谢,

2 个答案:

答案 0 :(得分:0)

编辑:对不起我最初读错了这个问题

  

我可以在可执行文件中使用SharedPreferences吗?

是。如果数据是原始类型,你肯定应该。

  

如何?

来自android开发者documentation

public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";

@Override
protected void onCreate(Bundle state){
   super.onCreate(state);
   . . .

   // Restore preferences
   SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
   boolean silent = settings.getBoolean("silentMode", false);
   setSilent(silent);
}

@Override
protected void onStop(){
   super.onStop();

  // We need an Editor object to make preference changes.
  // All objects are from android.context.Context
  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putBoolean("silentMode", mSilentMode);

  // Commit the edits!
  editor.commit();
}

}

我发布了一个关于如何使用SharedPrefs here的类似答案,请注意这个SharedPreferences 的用例打破 HashMap的好处,这对于查找和获取HashMap非常快钥匙的价值。

您可以采用以下方法:

//if you are running the code inside from an Activity
Context context = this;
SharedPreferences userSharedPrefs = context.getSharedPreferences("USER_NAME_PREFS", MODE_PRIVATE);
SharedPreferences pwdSharedPrefs = context.getSharedPreferences("PWD_PREFS", MODE_PRIVATE);

方法getAll()将返回一个名为HashMap的数据结构,其作用类似于字典:

对于存储的每个,都有唯一键

旁注:通过立即获取它们,你有点打破了这个数据结构的目的,但让我们继续

    Map<String, String> userNameHashMap = (Map<String, String>)userSharedPrefs.getAll();
    Map<String, String> pwdHashMap = (Map<String, String>)pwdSharedPrefs.getAll();

那么你可以随心所欲地做任何事情

希望他们列入名单? (我假设你的用户名是字符串)

    List<String> userNameList = new LinkedList<>();
    userNameList.addAll(userNameHashMap.values());

想知道用户john是否有密码?

    boolean johnHasPasswd = pwdHashMap.containsKey("john");
    String johnsPass;

    if(johnHasPasswd)
        johnsPass = pwdHashMap.get("john");

如果要使用本机数据存储机制,则仅限于以下

  

您的数据存储选项如下:

     
      
  • 共享首选项将私有原始数据存储在键值对中。
  •   
  • Internal Storage将私人数据存储在设备内存中。
  •   
  • External Storage将公共数据存储在共享外部存储上。
  •   
  • SQLite的   数据库将结构化数据存储在专用数据库中。
  •   
  • 网络连接使用您自己的网络服务器在网络上存储数据
  •   

您应该从开发者网站查看这些official docs

希望这有帮助!

答案 1 :(得分:0)

共享偏好是存储预存数据的最佳解决方案:

    SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES,         Context.MODE_PRIVATE);
    Editor editor = sharedpreferences.edit();
    editor.putString("key", "value");
    editor.commit();