2013-08-20 2 views
3

환경 설정 XML에서 빈도 목록을 설정하려고하는데이 오류가 계속 발생합니다. 관련된 모든 파일도 첨부했습니다. 값을 올바르게 설정했다고 믿지만 현재 내 오류가있는 곳을 찾을 수 없습니다. 또한 SharedPreferences.getString (key, defaultValue)을 사용할 때 반환되는 값은 무엇입니까? 엔트리 또는 엔트리 란?SharedPreferences ListPreference NullPointerException

내 오류 :

08-20 00:14:25.195: E/AndroidRuntime(1260): FATAL EXCEPTION: main 
08-20 00:14:25.195: E/AndroidRuntime(1260): java.lang.NullPointerException 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.preference.ListPreference.findIndexOfValue(ListPreference.java:215) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.preference.ListPreference.getValueIndex(ListPreference.java:224) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.preference.ListPreference.getEntry(ListPreference.java:202) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.preference.ListPreference.getSummary(ListPreference.java:148) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.preference.Preference.onBindView(Preference.java:515) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.preference.Preference.getView(Preference.java:453) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:222) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.AbsListView.obtainView(AbsListView.java:2461) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.ListView.makeAndAddView(ListView.java:1775) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.ListView.fillDown(ListView.java:678) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.ListView.fillFromTop(ListView.java:739) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.ListView.layoutChildren(ListView.java:1628) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.AbsListView.onLayout(AbsListView.java:2296) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.View.layout(View.java:14063) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewGroup.layout(ViewGroup.java:4603) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.View.layout(View.java:14063) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewGroup.layout(ViewGroup.java:4603) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.View.layout(View.java:14063) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewGroup.layout(ViewGroup.java:4603) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.View.layout(View.java:14063) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewGroup.layout(ViewGroup.java:4603) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.View.layout(View.java:14063) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewGroup.layout(ViewGroup.java:4603) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1994) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1815) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4518) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.Choreographer.doFrame(Choreographer.java:525) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.os.Handler.handleCallback(Handler.java:615) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.os.Looper.loop(Looper.java:137) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at android.app.ActivityThread.main(ActivityThread.java:4898) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
08-20 00:14:25.195: E/AndroidRuntime(1260):  at dalvik.system.NativeStart.main(Native Method) 

XML 레이아웃 :

<ListPreference 
     android:key="frequency_key" 
     android:title="Sample Rate" 
     android:defaultValue="8000" 
     android:entries="@array/freq_titles" 
     android:entryValues="@array/freq_values" 
     /> 

XML 배열 :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<string-array name="freq_titles"> 
    <item name="8000">8k Hz</item> 
    <item name="16000">16k Hz</item> 
    <item name="22050">22.05k Hz</item> 
    <item name="44100">44.1k Hz</item> 
    <item name="48000">48k Hz</item> 
</string-array> 

<array name="freq_values"> 
    <item name="8000">8000</item> 
    <item name="16000">16000</item> 
    <item name="22050">22050</item> 
    <item name="44100">44100</item> 
    <item name="48000">48000</item> 
</array> 

</resources> 

업데이트 : 공유 기본값에서()는 getAll 메를 할 경우에도이 이상 해요 환경 설정에서 "frequency_key = 8kHz"라고 표시됩니다. 초기화되었습니다. 내 취향 클래스

더 코드 :

public class Settings_ActivityAH extends PreferenceFragment implements OnSharedPreferenceChangeListener{ 
private SharedPreferences prefs; 
private Preference myAccountName; 
private Preference myGoogleUsername; 
private Preference myGooglePassword; 
private static Context context; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 
    context = getActivity(); 

    if (context == null){ 
     Log.e("error","context is null"); 
    } 


    prefs = PreferenceManager.getDefaultSharedPreferences(context); 

    myAccountName = (Preference) findPreference("account_name_title_key"); 
    myGoogleUsername = (Preference) findPreference("googleusername_key"); 
    myGooglePassword = (Preference) findPreference("googlepassword_key"); 
    myAccountName.setSummary(prefs.getString("account_name_title_key", "none")); 
    myGoogleUsername.setTitle("username: "+prefs.getString("googleusername_key", "none")); 
    myGooglePassword.setTitle("password: "+prefs.getString("googlepassword_key", "none")); 
    Log.e("Check prefs",prefs.getAll().toString()); 
    prefs.registerOnSharedPreferenceChangeListener(this); 

} 

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
     String key) { 
    Log.e("in onSharedPref","yea"); 
    Preference preference = findPreference(key); 

    if (preference.getClass() == EditTextPreference.class){ 
     Log.e("in editText Pref", "yeah"); 

     if(key.equals("account_name_title_key")){ 
      myAccountName.setSummary(sharedPreferences.getString("account_name_key","none")); 
      Log.e("accountname prefs",sharedPreferences.getString("account_name_key","none")); 
    } 
     if(key.equals("account_name_key")){ 
      myAccountName.setSummary(sharedPreferences.getString("account_name_key","none")); 
      Log.e("accountname prefs",sharedPreferences.getString("account_name_key","none")); 
    } 

    else if (preference.getClass() == PreferenceCategory.class){ 
     Log.e("in category Pref", "yeah"); 

     if (key.equals("googleusername_key")){ 
      myGoogleUsername.setTitle("Username: "+sharedPreferences.getString(key, "none")); 
      Log.e("googleusername prefs",sharedPreferences.getString(key, "none")); 

     } 
     else if(key.equals("googlepassword_key")){ 
      myGooglePassword.setTitle("Password: "+sharedPreferences.getString(key, "none")); 
      Log.e("googlepassword prefs",sharedPreferences.getString(key, "none")); 

     } 
    } 

} 
else{ 
    Log.e("insufficient key called","onSharedPreferenceChanged AH"); 
} 

} 

}

+0

코드의 다른 부분을 게시 하시겠습니까? 자바 클래스에서 어떻게 구현 했습니까? – Tugrul

+0

그게 아니야 내 자바 클래스에 어디서나 내가 현재 선택되어 있지만 내가 nullpointer 예외를 받고 때 값을 가져올 필요가 때 제외. 내 환경 설정 메뉴로 이동하면 오류가 나타납니다. –

+0

preferences.getString ("key", defValue)을 할 때, 그 키를 가진 문자열의 값을 얻습니다. 문자열이 없으면 기본값을 사용합니다. 당신이 그것을 부르고 문자열이 없다면, 그것은 디폴트가 될 것이 있습니다. –

답변

7

이 안드로이드 만 ListPreference XML 속성 android:entryValues에 인수로 string-array '의의를 받아 들일 것으로 보인다. 이것은 모든 XML 속성이 하나의 특정 미리 결정된 유형 (즉, int, bool, string 등)을 갖는 인수와 만 일치한다는 것입니다. 다음 질문을 참조하십시오. ListPreference: use string-array as Entry and integer-array as Entry Values doesn't work

부울 질문에 대해서는 getString()이 요소 클릭 된 항목에 해당하는 android:entryValues 배열의 android:entries 배열은 사용자의 일련의 표시 문자열로만 사용되며 코드에는 다른 영향이 없습니다. android:entryValues의 값은 앱의 영구 저장소에 사용됩니다.