EditTextPreference在我的偏好活动中使用简单的:
<EditTextPreference
android:key="SomeKey"
android:title="@string/some_title"
android:summary="..."
android:numeric="integer"
android:maxLength="2"
/>
Run Code Online (Sandbox Code Playgroud)
有没有办法将此配置值保存为整数?现在似乎只允许输入数字,但该值仍保存为字符串:
呼叫:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int value = preferences.getInt("SomeKey", -1);
Run Code Online (Sandbox Code Playgroud)
抛出我java.lang.ClassCastException: java.lang.String,并且:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String value = preferences.getString("SomeKey", "-1");
Run Code Online (Sandbox Code Playgroud)
成功检索值.
如何PreferenceActivity默认将值保存为整数?
查看SharedPreferences文档,它说:
"注意:目前这个类不支持跨多个进程使用.这将在以后添加."
所以它本身似乎并不是线程安全的.但是,对commit()和apply()有什么样的保证?
例如:
synchronized(uniqueIdLock){
uniqueId = sharedPreferences.getInt("UNIQUE_INCREMENTING_ID", 0);
uniqueId++;
sharedPreferences.edit().putInt("UNIQUE_INCREMENTING_ID", uniqueId).commit();
}
Run Code Online (Sandbox Code Playgroud)
是否可以保证uniqueId在这种情况下始终是唯一的?
如果没有,是否有更好的方法来跟踪持续存在的应用程序的唯一ID?
android文档在下面有以下选项,但没有解释每种情况最适合的情况.每种方法的优缺点是什么?例如,在什么条件下SQL会优于共享首选项?
在我的应用程序中,我想在广播接收器中使用共享首选项...但我无法访问里面的getPreferences()方法...
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)
我不能用上下文对象调用...任何其他方法???
我知道SharedPreferences有putString(),putFloat(),putLong(),putInt()和putBoolean().但我需要存储一个对象,它是类型的Serializable在SharedPreferences.我怎样才能做到这一点?
我将String存储到共享首选项中,但我无法找到我可以存储的最大字符串长度.你知道这个价值吗?
我正在开发一个Android应用程序.我正在使用android 2.2
在我的应用程序中,我正在捕获GPS数据并以1小时的时间间隔将其发送到服务.如果用户退出应用程序,它也可以正常工作(这是必需的).
我正在使用2个服务(用户定义),一个用于捕获GPS数据,另一个用于发送到服务器.
在这里我怀疑
在服务中,我们可以使用共享首选项.
如果我们将任何数据存储在应用程序的任何活动中的共享首选项中,我们是否可以在共享首选项的帮助下使用该服务中的数据?
我正在创建共享首选项,如下所示
preferences = getSharedPreferences("text", 0);
final Editor editor = preferences.edit();
String s1 = serverIP.getText().toString();
String s2 = serverPort.getText().toString();
String s3 = syncPass.getText().toString();
String s4 = proxyServer.getText().toString();
String s5 = proxyPort.getText().toString();
editor.putString("SERVERIP", s1);
editor.putString("SERVERPORT", s2);
editor.putString("SYNCPASS", s3);
editor.putString("PROXYSERVER", s3);
editor.putString("PROXYPORT", s3);
Run Code Online (Sandbox Code Playgroud)
和onCreate我想在一组新的TextViews中显示值,但是第一次我没有在共享首选项中存储任何值,并且会得到一个NULL指针异常.
我想知道是否有任何内置方法可以检查SharedPreferences是否包含任何值,以便我可以检查密钥是否存在,如果不存在,则将新的TextViews集替换为首选项值.
我正在以这种方式检查文件是否存在,但我需要超越,我需要知道具体是否有一个,有什么办法吗?
File f = new File("/data/data/com.eventrid.scanner/shared_prefs/Eventrid.xml");
if (f.exists()){
}
else{
}
Run Code Online (Sandbox Code Playgroud) 在运行Android M Developer Preview 2的Nexus 5上,当卸载/重新安装应用程序时,设备正在检索我很久以前存储的共享首选项,例如布尔值isFirstLaunch.
清除这些的唯一方法是从设备设置手动执行.
Android M上的共享首选项行为是否有任何变化?我找不到任何关于此的文件.
或许Android M Preview 2 ROM有一个bug ...