2011-07-18 26 views
0

我正在尝试向我的应用添加首选项,但无法使其正常工作。首选项的错误使用

这里是我的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> 

这里是我的价值观/ 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

在java中比较字符串时不要使用“==”,请使用equals或equalsIgnoreCase方法。 – Dahlgren

回答

0

您已声明变量首选项都作为该类中的实例变量,该变量用于OnClickListener中以及onCreate方法中。实例变量永远不会被初始化,因此在OnClickListener中访问时实例变量为空。更改

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

preferences = PreferenceManager.getDefaultSharedPreferences(this); 
在MyApp的活动

,它可能会工作。