【问题标题】:How can I store, and read setting data to Preference?如何将设置数据存储和读取到 Preference?
【发布时间】:2013-08-14 21:58:20
【问题描述】:

我正在尝试将flick_level_number 存储为偏好。
但这不起作用:(如何将其存储为flick_level_number
以及如何阅读 onCreate?

public void selectSensibility(int level_number){
    switch (level_number) {
    case 0:
         flick_width_sensibility = 0.2f;
         flick_height_sensibility = 0.3f;
         flick_level_number = 0;
         break;
    case 1:
         flick_width_sensibility = 0.4f;
         flick_height_sensibility = 0.2f;
         flick_level_number = 1;
         break;
    case 2:
         flick_width_sensibility = 0.6f;
         flick_height_sensibility = 0.15f;
         flick_level_number = 2;
         break;
    } 

   //Here, I want to store `flick_level_number` to Preference
    Editor editor = sharedPref.edit();
    editor.putString(
      "flick_level_number", writeEditText.getText().toString());
    editor.commit();

}

LogCat

08-14 22:05:34.102: E/AndroidRuntime(9413): FATAL EXCEPTION: main
08-14 22:05:34.102: E/AndroidRuntime(9413): java.lang.NullPointerException
08-14 22:05:34.102: E/AndroidRuntime(9413):     at com.sample.MainActivity.selectSensibility(MainActivity.java:240)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at com.sample.MainActivity$2.onClick(MainActivity.java:270)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:980)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.widget.AbsListView.performItemClick(AbsListView.java:1150)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.widget.ListView.performItemClick(ListView.java:4397)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2985)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.widget.AbsListView$1.run(AbsListView.java:3671)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.os.Handler.handleCallback(Handler.java:615)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.os.Looper.loop(Looper.java:155)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at android.app.ActivityThread.main(ActivityThread.java:5511)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at java.lang.reflect.Method.invokeNative(Native Method)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at java.lang.reflect.Method.invoke(Method.java:511)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
08-14 22:05:34.102: E/AndroidRuntime(9413):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

标签: java android


【解决方案1】:

只需对要存储 int 的偏好类说:

 editor.putInt("name", put your int value here);
 instead of
 editor.putString();

您仍然可以将 flick_level_number 保存为字符串,只需将字符串解析为 int:

     myNum = Integer.parseInt(your preference that store your value);

然后创建:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity); 
     // getpreferences
     SharedPreferences settings = getSharedPreferences("Your preference file", 0);  
     final float  value= settings.getFloat("flick_level_number", your default value);
     final int value1 = settings.getInt("flick_level_number", your default value);
         final String value2 = settings.getIString("flick_level_number", "your default value");

}

你的空指针是:sharedPref 来解决这个问题

         sharedPref  = getSharedPreferences("MyPrefsFile", 0);
    Editor editor = sharedPref.edit();
    editor.putInt("flick_level_number", flick_level_number);
    editor.commit();

【讨论】:

  • 谢谢但它仍然关闭:(使用此代码editor.putInt("flick_level_number", flick_level_number);
  • 你说“我的默认值”是什么意思?
  • 问题是:sharedPref 为空。尝试在 onCreate 方法中添加此代码: sharedPref = getSharedPreferences("name your file", 0);... 您也可以在 Editor editor = sharedPref.edit(); 上方添加这行代码
  • nop in real device...如果您在模拟器中运行您的应用程序,您将获得 root 访问权限,您也可以打印您的首选项值并查看 logcat 上的值...例如:System。 out.println(值);或 Log.d("我的活动名称","我的价值");.... 等
  • 不是默认值是打开模式:操作模式。使用 0 或 MODE_PRIVATE 进行默认操作,使用 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 来控制权限。如果多个进程正在改变同一个 SharedPreferences 文件,也可以使用位 MODE_MULTI_PROCESS。 MODE_MULTI_PROCESS 在面向 Gingerbread (Android 2.3) 及更低版本的应用中始终开启,在更高版本中默认关闭。
猜你喜欢
  • 2021-01-13
  • 1970-01-01
  • 2019-09-01
  • 2011-12-31
  • 2021-08-27
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2018-12-16
相关资源
最近更新 更多