【问题标题】:Android ==> Preference?Android ==> 偏好?
【发布时间】:2010-06-19 09:26:25
【问题描述】:

我的应用程序因以下代码中的空指针异常而崩溃。 我在 res/xml/defaults.xml 下有一个 xml 首选项文件 知道为什么会崩溃吗?

public class Preference extends Activity {
    public Preference()
    {
    }

    public String getPreference(String key)
    {
                //it still crashes here
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
        String result = settings.getString(key,  null);
        return result;
    }
}

【问题讨论】:

    标签: android preferences shared android-preferences sharedpreferences


    【解决方案1】:

    首选项文件存储在项目的/res/xml/defaults.xml

    它们存储在设备上的应用程序文件夹中,例如

    /data/data/com.your.pkg/default.prefs
    

    尽量不要指定文件名,因为首选项文件会有一些问题,就像这个 OP 有 here

    SharedPreferences preferences = PreferenceManager
                        .getDefaultSharedPreferences(context);
    

    那么你可能需要查询

    preferences.getString('weightPref', null);
    

    【讨论】:

    • 谢谢,我按照你的建议做了,但我仍然得到一个 nullPointerException。我在上面发布了我的完整代码,你看到问题了吗?谢谢
    【解决方案2】:

    这是一个示例代码,它显示了如何保存和检索首选项。这里我将用户名和密码保存在 SharedPreferences 中。

    SharedPreferences uPreferences = getSharedPreferences("CurrentUser", MODE_PRIVATE);
    SharedPreferences.Editor editor; = uPreferences.edit(); //Instantiating editor object
    
    
    protected void storeSharedPrefs(String username, String password) {
            /*
             * Storing in Shared Preferences
             */
            editor.putString("username", username);
            editor.putString("password", password);     
            editor.commit();  //Commiting changes
        }
    

    在 SharedPreferences 的另一个活动中检索用户名和密码。

     private SharedPreferences mSP;
        mSP = getSharedPreferences("CurrentUser", MODE_PRIVATE);
                String username = mSP.getString("username", null);
                String password = mSP.getString("password", null);
    

    希望对你有帮助..

    【讨论】:

      【解决方案3】:

      在共享首选项中设置一个值:

      Editor prefs = getSharedPreferences("Application_name", MODE_PRIVATE).edit();
      prefs.putString("key", accountKey);
      prefs.commit();
      

      从另一个活动中获取价值:

      String accountKey = 
          this.getSharedPreferences("Application_name", MODE_PRIVATE).
          getString("key", null);
      

      如果您使用一些预定义的处理程序(例如getString(R.string._key))而不是硬编码字符串"key" 来访问该变量,那就太好了。

      【讨论】:

        【解决方案4】:

        您的首选项应该扩展PreferenceActivity。然后您需要为首选项创建一个资源 xml 文件,并在您的 PreferenceActivity 中引用它,如下所示:

        @Override
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    addPreferencesFromResource(R.xml.preferences);
                    etc.
            }
        

        preferences xml 应该有一个 PreferenceScreen 作为顶级元素,您可以利用 Android 为您提供的所有不同的偏好视图来设置偏好。这将是最常见、最优雅的方式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-17
          • 1970-01-01
          • 2013-03-27
          • 2019-06-20
          相关资源
          最近更新 更多