【问题标题】:Why does a shared preference contains something I haven't put?为什么共享首选项包含我没有输入的内容?
【发布时间】:2013-05-31 04:00:25
【问题描述】:

问题解决了。

在我第一次关闭共享首选项之前,它应该包含任何内容,但错误显示 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):致命异常:主要 06-05 13:05:30.023:E/AndroidRuntime(1625):java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.vocabulary/com.example.vocabulary.MainActivity}:java.lang.IndexOutOfBoundsException:无效索引 0,大小为 0 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.ActivityThread.access$600(ActivityThread.java:130) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.os.Handler.dispatchMessage(Handler.java:99) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.os.Looper.loop(Looper.java:137) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.ActivityThread.main(ActivityThread.java:4745) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 java.lang.reflect.Method.invokeNative(Native Method) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 java.lang.reflect.Method.invoke(Method.java:511) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 06-05 13:05:30.023: E/AndroidRuntime(1625): at dalvik.system.NativeStart.main(Native Method) 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.example.vocabulary.MainActivity.PrintWords(MainActivity.java:70) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 com.example.vocabulary.MainActivity.ShitsToDoWhenCodeSucks(MainActivity.java:118) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 com.example.vocabulary.MainActivity.onCreate(MainActivity.java:145) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.Activity.performCreate(Activity.java:5008) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 06-05 13:05:30.023: E/AndroidRuntime(1625): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 06-05 13:05:30.023: E/AndroidRuntime(1625): ... 11 更多

【问题讨论】:

  • 在哪里你得到那个例外?哪条线?
  • 我相信这是第一个 if 语句,因为如果我删除它,应用程序的其余部分会完美运行
  • 您应该查看异常 - 它会显示导致问题的行。
  • 我不确定是哪一行。我该怎么做才能检查?
  • 如我所说,看看异常。堆栈跟踪应该为您提供大量信息。

标签: java android sharedpreferences contains


【解决方案1】:

那里有一个名为“myfile”的首选项文件吗?

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

【讨论】:

  • 我问的是,你有一个带有 的首选项的 xml 文件
  • 否则,在你的onCreate中,写为 --> SharedPreferences.Editor editor = pref.edit(); editor.putString("key", "defaultval"); editor.commit();
  • 另外,请查看您的“列表”。你是说 ArrayList 对象吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多