我想存储一个时间值,需要检索和编辑它.我SharedPreferences该怎么用呢?
Android getDefaultSharedPreferences和getSharedPreferencesAndroid有什么区别?有人可以解释一下吗?
我正在使用共享首选项来存储我的应用程序的某些值.我想看看信息实际存储在手机上的文件.我在Eclipse上找到了很多方法,但是我在Android Studio上进行调试.我的手机扎根了.我读到有root权限对于读取这些类型的文件很重要.如果没有办法,那么我将查找如何通过我的程序访问信息然后将其输出到log cat.但是,希望我可以直接在手机上查看文件,因为它更简单.谢谢.
我一直在开发一个Android应用程序,它通过共享首选项文件与设备上安装的其他应用程序进行交互.
此文件创建为MODE.WORLD_READABLE,并且每个已安装的应用程序都有自己的文件,该文件具有公共定义的名称和属性(该特定属性的值的更改).
例如,AppA和AppB应该每个都有一个名为"app_shared_file.xml"的共享文件,其属性为"property_shared_file".
从我的应用程序,我想首先访问此文件并读取该属性值,并根据该结果我想创建/更新我的.
尽管如此,我在实现这一目标方面遇到了一些问题.在Android文档中,我看到:
检索并保存首选项文件"name"的内容,返回SharedPreferences,您可以通过它来检索和修改其值.只有一个SharedPreferences对象实例返回给任何相同名称的调用者,这意味着他们一旦完成就会看到彼此的编辑.
在阅读其他应用程序共享首选项文件后,当我尝试创建/更新我的系统而不是编辑我的时候正在使用我之前读过的那个.如果相反,我开始更新我的并稍后阅读其他应用程序 - 而不是阅读另一个应用程序,正在访问的是我的.
有什么想法吗?
我用来读取共享pref的代码是[其中packageName是另一个app pckg]:
Context con = context.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences pref = con.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_WORLD_READABLE);
pref.getBoolean(SHARED_PREF_PROP, false);
Run Code Online (Sandbox Code Playgroud)
我用于在app shared pref中编写的代码是:
SharedPreferences prefs= getSharedPreferences(SHARED_PREF_NAME, context.MODE_WORLD_READABLE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(SHARED_PREF_PROP, value);
editor.commit();
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我正在开发中,我在存储应用username和password在SharedPreferences.所有的东西都适合我,存储以及检索值.但我发现当我重新启动设备或应用程序强制关闭时,存储的值将SharedPreferences被重置.当我再次启动我的应用程序时,我在SharedPreferences键中获得空值.在这里,我正在做什么来存储值:
SharedPreferences emailLoginSP;
emailLoginSP = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
emailLoginSP.edit().putString("prefEmailId", email_text).commit();
emailLoginSP.edit().putString("prefUserId", userIDToken).commit();
emailLoginSP.edit().putString("prefAccess_token", accessToken).commit();
Intent i = new Intent(LoginWithEmail.this,UserInfoActivity.class);
i.putExtra("acess_token", accessToken);
i.putExtra("user_id", userIDToken);
i.putExtra("emailID", email_text);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
而且,这就是我正在重温它的方式:
SharedPreferences emailLoginSP = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
loginEmail = emailLoginSP.getString("prefEmailId", null);
loginUserId = emailLoginSP.getString("prefUserId", null);
loginAccessToken = emailLoginSP.getString("prefAccess_token", null);
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切正常.我再次说明我的问题,当我强制关闭或重启我的设备时,我得到空值.我们可以将它永久存储在应用程序内存中吗?或者,我在这里做错了什么?
任何帮助将不胜感激.
当我创建首选项xml文件时(通过右键单击项目名称,选择"|新建|其他| Android XML文件",然后从"新建Android XML文件"对话框中的"资源类型"微调器中选择"首选项"),它将它保存在res/xml而不是res/layout中.这是应该的吗?
我有一个通过OAuth安全性与WebAPI交互的Android应用程序.为了获取访问令牌,我需要在请求的标头中发送OAuth凭证(即客户端ID和客户端密钥).我的问题是,我应该在哪里保留这两个值(客户端ID和客户端密码),以便应用程序在需要时使用它.目前,我刚刚在通话中对其进行了硬编码.将它们保存在strings.xml文件中是否安全?
我已经查了很多关于不同数据存储方法的内容,并且我试图弄清楚Android SharedPreferences在哪个方面是不对的.
我意识到字符串的限制是非常庞大的(~2B),所以存储它不是一个记忆问题,我对"最佳实践"更加好奇.
我将在这个应用程序的生命周期中有5到15个"更新".我希望每部手机都能保存这些更新.更新将有一个简短的标题,从句子到两个段落.
我意识到通常存在可扩展性的问题,但这里没有关注.这是一个每年使用一个周末的应用程序.
我不需要搜索或操纵这些,只需要存储它们的能力.
我可以使用GSON将它们全部存储为JSON对象,但是对于首选项来说,这个字符串太大了吗?或者它是否正常,因为内部存储(作为CSV或其他东西)或数据库将是矫枉过正?