偏好的使用不正确

时间:2011-07-18 19:40:11

标签: android android-preferences

我正在尝试为我的应用添加偏好设置,但无法使其正常工作。

这是我的res / xml / preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
  <ListPreference 
        android:key="format"
        android:title="Saving Format"
        android:summary="Select the file format"
        android:defaultValue=".jpg" 
        android:entries="@array/format"
        android:entryValues="@array/formatValues" />        
</PreferenceScreen>

这是我的values / array.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="format">
        <item name=".jpg">JPEG</item>
        <item name=".gif">GIF</item>

   </string-array>

    <string-array name="formatValues">
        <item name=".jpg">.jpg</item>
        <item name=".gif">.gif</item>

    </string-array>
</resources>

以下是我的偏好活动:

package com.sass.recorder;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class MyPreferences extends PreferenceActivity {

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

}

以下是主要活动类:

...imports..

public class MyApp extends Activity {
...Initializations..
SharedPreferences preferences;
.....
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        ....
        private OnClickListener mOneShotListener = new OnClickListener() {
        public void onClick(View v) {
        //evaluate preferences and change the path variable
        if (preferences.getString("format", ".jpg") == ".jpg") {
        path = "/sdcard/output/" + editText1.getText() + ".jpg";
        } else if (preferences.getString("format", ".gif") == ".gif"){
        path = "/sdcard/output/" + editText1.getText() + ".gif";
        }
        }
        }
    }
}

首选项活动有效(来自我未在此处粘贴的菜单),但具有首选项评估的按钮不会单击或作出反应。有时,debuger在行中显示NullPointerException     if (preferences.getString("format", ".jpg") == ".jpg")

任何想法我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

您已将变量 preferences 声明为类中的实例变量,该变量在OnClickListener中使用,并在onCreate方法中使用。实例变量从未初始化,因此在OnClickListener中访问时为null。变化

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

preferences = PreferenceManager.getDefaultSharedPreferences(this);

在MyApp活动中,它可能会有效。