当前位置: 首页 > 知识库问答 >
问题:

为什么一个共享的偏好包含我没有放的东西?

荆炳
2023-03-14

问题解决了。

在我第一次关闭共享首选项之前,它应该包含任何内容,但错误显示IndexOutOfBoundsExceptions。怎么会?

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SharedPreferences pref = getSharedPreferences("myfile", MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();
    editor.commit();
    if(pref.contains("key")){
    List.addAll(pref.getStringSet("key", null));
    };         
}

@Override
public void onStop(){
    super.onStop();
    if(size>0){
    Set<String> set1 = new HashSet<String>();
    set1.addAll(List);
    SharedPreferences pref = getSharedPreferences("myfile", MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();
    editor.putStringSet("key", set1);
    editor.commit();
    };
}

我不确定要在logcat上寻找什么,所以我只是把它全部粘贴了下来。

06-05 13:05:30.023:E/AndroidRuntime(1625):致命异常:main 06-05 13:05:30.023:E/AndroidRuntime(1625):java。lang.RuntimeException:无法启动活动组件信息{com.example.词汇表/com.example.词汇表.MainActivity}:java。lang.IndexOutOfBoundsException:索引0无效,大小为0 06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。应用程序。活动线程。performLaunchActivity(ActivityThread.java:2059)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。应用程序。活动线程。handleLaunchActivity(ActivityThread.java:2084)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。应用程序。活动线程。在android上访问$600(ActivityThread.java:130)06-05 13:05:30.023:E/AndroidRuntime(1625)。应用程序。ActivityThread$H.handleMessage(ActivityThread.java:1195)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。操作系统。汉德勒。dispatchMessage(Handler.java:99)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。操作系统。活套。loop(Looper.java:137)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。应用程序。活动html" target="_blank">线程。main(ActivityThread.java:4745)06-0513:05:30.023:E/AndroidRuntime(1625):在java。朗,反思一下。方法Invokenactive(本机方法)06-05 13:05:30.023:E/AndroidRuntime(1625):在java上。朗,反思一下。方法invoke(Method.java:511)06-05 13:05:30.023:E/AndroidRuntime(1625):在com上。Android内部的操作系统。ZygoteInit$MethodandArgscaler。运行(ZygoteInit.java:786)06-05 13:05:30.023:E/AndroidRuntime(1625):在com上运行。Android内部的操作系统。合子体。main(zyteinit.java:553)06-0513:05:30.023:E/AndroidRuntime(1625):在dalvik。系统原生艺术。main(原生方法)06-05 13:05:30.023:E/AndroidRuntime(1625):由java引起。lang.IndexOutOfBoundsException:索引0无效,大小为0 06-05 13:05:30.023:E/AndroidRuntime(1625):在java。util。ArrayList。throwIndexOutOfBoundsException(ArrayList.java:251)06-05 13:05:30.023:E/AndroidRuntime(1625):在java。util。ArrayList。get(ArrayList.java:304)06-05 13:05:30.023:E/AndroidRuntime(1625):在com上。实例词汇主要活动。PrintWords(MainActivity.java:70)06-05 13:05:30.023:E/AndroidRuntime(1625):在com上。实例词汇主要活动。ShitsToDoWhenCodeSucks(main activity.java:118)06-05 13:05:30.023:E/AndroidRuntime(1625):在com上。实例词汇主要活动。onCreate(MainActivity.java:145)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。应用程序。活动performCreate(Activity.java:5008)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。应用程序。仪器仪表。callActivityOnCreate(Instrumentation.java:1079)06-05 13:05:30.023:E/AndroidRuntime(1625):在android上。应用程序。活动线程。performLaunchActivity(ActivityThread.java:2023)06-05 13:05:30.023:E/AndroidRuntime(1625):。。。还有11个

共有1个答案

蒋何平
2023-03-14

你有名为“myfile”的首选项文件吗?

如果此名称的首选项文件不存在,则将在检索编辑器(SharedPreferences.edit())并提交更改(Editor.commit())时创建该文件。

 类似资料:
  • 我有一个这样的旋转器: 当用户点击时,我希望它保存状态: 它将位置保存在SharedPref中,但微调器将返回默认值。有人看到什么了吗?

  • 我有一个ASP.NET MVC5应用程序在Azure中作为应用程序服务运行,并且希望安排一个WebJob每小时执行一个控制台应用程序。 在控制台应用程序中,我将文件定义为: 当我查看Azure门户时,WebJob的类型似乎被设置为触发--当我手动启动作业时,该作业将成功运行,但它并不是每小时都执行一次。

  • 我不确定该如何表述这个问题,但我目前面临的问题是,为什么我的LoginActivity在启动时没有显示。下面是我的代码 因此,为了让您想要的activity首先显示,您必须替换您想要的右侧上方的那个?但替换后,不知何故我的loginActivity并不是显示的第一个屏幕。我尝试将忘记帐户和signupActivity替换为启动时显示的第一个屏幕,并且两者都按预期显示。然而,对于我的LoginAct

  • 问题内容: 我正在观看有关Java的演示,有一次讲师说: “可变性还可以,共享很好,共享可变性是魔鬼的工作。” 他指的是以下代码,他认为这是“极度坏习惯”: 然后,他着手编写应使用的代码,即: 我不明白为什么第一段代码是“不良习惯”。对我来说,他们都实现了相同的目标。 问题答案: 当执行并行处理时,该问题就起作用了。 在使用流时,这不必要地使用了 副作用, 但如果正确使用,并非所有副作用都不好,因

  • 我正在看一个关于Java的演讲,有一次,讲师说: “可变是可以的,共享是好事,共享可变是魔鬼的工作。” 他所指的就是以下代码,他认为这是一个“极其糟糕的习惯”: 然后,他继续编写应该使用的代码,即: 我不明白为什么第一段代码是“坏习惯”。对我来说,他们都达到了相同的目标。

  • 当单元测试共享首选项时,值是否为get refresh every test?