我正在尝试为我的应用添加偏好设置,但无法使其正常工作。
这是我的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")
任何想法我做错了什么? 谢谢!
答案 0 :(得分:0)
您已将变量 preferences 声明为类中的实例变量,该变量在OnClickListener中使用,并在onCreate方法中使用。实例变量从未初始化,因此在OnClickListener中访问时为null。变化
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
到
preferences = PreferenceManager.getDefaultSharedPreferences(this);
在MyApp活动中,它可能会有效。