该程序第一次创建首选项,但之后它永远不会更改它们.我很感激帮助理解为什么.

这是调用xml的PreferencesScreen.

public class PreferencesScreen extends PreferenceFragment{

private final String TAG = "PreferencesScreen";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG,"OnCreate");
    addPreferencesFromresource(R.xml.prefs);
}

在首选项中,我有一个ListPreference和一个Preference,它调用一个活动来存储电子邮件.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<PreferenceCategory android:title="information Collected">
    <ListPreference 
        android:key="loggins"
        android:title="Logs Stored"
        android:summary="Choose the top kind of logs do you want to store."
        android:dialogTitle="Choose Logs"
        android:entries="@array/logs"
        android:entryValues="@array/logsValues"/>
</PreferenceCategory>

 <PreferenceCategory android:title="Email Configurations">
        <Preference
              android:key="pushing"
              android:title="The Email Activity"
              android:summary="Just push">
             <intent android:action = "ADDING_EMAIL"/>
        </Preference>
 </PreferenceCategory>
</PreferenceScreen>

一切都在这里.问题出在所谓的……

public class AddingEmail extends ListActivity implements OnClickListener{       

private Set<String> emails; 
private EditText emailAdd;
SharedPreferences.Editor editor;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addingemail);
    Button add = (Button) findViewById(R.id.add);
    emailAdd = (EditText) findViewById(R.id.email);
    prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    editor = prefs.edit();

    prefList = toArrayList(prefs.getStringSet("emailWrongs",null));
    add.setonClickListener(this);
}


public void onClick(View v) {
    Set<String> list = prefs.getStringSet("emailWrongs",null);
    String newEmail = emailAdd.getText().toString();        
    if (list==null){  //first time the preferences are called. 
        emails = new TreeSet<String>();
        editor.putStringSet("emailWrongs",emails);
        editor.apply();
    }
    if (newEmail != ""){
        emails=prefs.getStringSet("emailWrongs",null);
        emails.add(newEmail);
        editor.putStringSet("emailWrongs",emails);
        editor.apply();
    }
}

}

关键是它总是存储第一次很好,但如果我在添加另一封电子邮件时,首选项不会改变.他们看起来好像改变了,因为如果我打印它们会显示我添加的所有电子邮件,但偏好文件不会改变(在文件资源管理器中检查它).如果我重新启动或关闭并再次打开,则首选项仅包含我添加的第一封电子邮件.
问题是,如果我回到并更改ListPreference的首选项,那么它甚至存储我添加的电子邮件的所有更改.

希望我很清楚,它有很多代码,因为我想要非常明确.
感谢您的帮助.

解决方法

经过一个多星期的寻找错误,我发现了它.
我认为这对很多遇到同样麻烦的人都有帮助.

问题是,当我调用首选项来获取字符串集时,它只引用列表而不复制它.因此,我必须创建一个新列表并添加之前存储的所有元素,并添加新元素,然后使用编辑器更改新列表的首选项.
代码是这样的:

Set<String> list = prefs.getStringSet("emailWrongs",null); 
Set<String> newList = new TreeSet<String>();
String newEmail = emailAdd.getText().toString();         
if (newEmail != ""){ 
    if (list != null){
        for(String each: list){
            newList.add(each);
        }
    }
    newList.add(newEmail);
    editor.putStringSet("emailWrongs",newList);     
    editor.apply();      
}

android – 共享首选项仅保存第一次的更多相关文章

  1. HTML5仿微信聊天界面、微信朋友圈实例代码

    小编最近开发一个基于html5开发的一个微信聊天前端界面,功能很全面,下面小编给大家分享实例代码,需要的朋友参考下

  2. android – 当应用程序强制关闭或设备重新启动时,共享首选项重置数据

    我正在开发一个应用程序,我在其中存储用户名和密码在SharedPreferences中.所有的东西都适合我,存储以及检索值.但我发现当我重启设备或强制关闭app时,SharedPreferences中存储的值会被重置.当我再次启动我的应用程序时,我在SharedPreferences键中获得空值.在这里,我正在做什么来存储值:而且,这就是我正在重温它的方式:到目前为止,所有的事情都很好.我再次说明我的问题,当我强制关闭或重启我的设备时,我得到空值.我们可以将它永久存储在应用程序内存中吗?

  3. android – 重置Preference的默认值

    我正在使用CheckBoxPreference进行设置屏幕.XML是:我在应用程序中更改了值.用户注销后,必须将其设置为xml中定义的默认值.但是,它似乎不起作用.他们保留我最后选择的那些价值观.阅读Android文档后,我发现了这个:但它几乎没有成功!使用SharedPreferences尝试其他方式.它也没用!我错过了什么吗?解决方法共享首选项应该有效,但您应该使用默认的共享首选项.要使用文件名获取共享首选项,Android会创建此名称(可能基于项目的包名称?

  4. android – 共享首选项仅保存第一次

    该程序第一次创建首选项,但之后它永远不会更改它们.我很感激帮助理解为什么.这是调用xml的PreferencesScreen.在首选项中,我有一个ListPreference和一个Preference,它调用一个活动来存储电子邮件.一切都在这里.问题出在所谓的……

  5. android – SharedPrefences未更新

    我有一个奇怪的问题,共享首选项在返回应用程序时没有被更新.这是场景:我有两个项目使用相同的共享首选项.Project1和Project2.它们是独立但相关的应用程序.他们使用相同的密钥进行签名,并使用sharedUserId来共享信息.Project1打开Project2.Project2检索SharedPreferences文件并通过以下方式写入:一旦完成,我通过调用finish()返回到Pro

  6. Android SharedPreferences限制?

    我在Android上开发了一款游戏.我目前正在保存数据库中的大部分游戏统计信息.但是,该应用程序不会在DB中使用多个单行.我现在有兴趣介绍一些新的统计数据,但这将导致我的数据库重新安装,从而清除每个人的进步.为了避免在将来的这个,我正在考虑存储游戏统计与SharedPreferences代替.我的问题是在成为问题之前可以将多少种不同的东西存储起来.总共我将存储大约40个值,所有的整数.解决方法Sh

  7. 详解Monaco Editor中的Keybinding机制

    这篇文章主要为大家介绍了详解Monaco Editor中的Keybinding机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  8. vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能

    这篇文章主要介绍了vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. Monaco Editor实现sql和java代码提示实现示例

    这篇文章主要为大家介绍了Monaco Editor代码提示sql和java实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. monaco editor在Angular的使用详解

    这篇文章主要为大家介绍了monaco editor在Angular的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部