Android   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – SharedPreferences ListPreference NullPointerException大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试在我的首选项xml中设置频率列表,但我一直收到此错误.我也附上了所有相关文件.我相信我正确设置了值,但我找不到我的错误当前的位置.另外,当我使用SharedPreferences.getString(key,DefaultValuE)时返回什么值? ENTRY或ENTRYVALUE?

我的错误

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@R_454_6964@="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 = 8k Hz”.所以它已经初始化了.

来自我的偏好类的更多代码

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");
}

}

}

解决方法:

似乎Android只接受字符串数组作为ListPreference XML属性android:entryValues的参数.这与所有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中的值用于应用程序中的持久存储.

大佬总结

以上是大佬教程为你收集整理的android – SharedPreferences ListPreference NullPointerException全部内容,希望文章能够帮你解决android – SharedPreferences ListPreference NullPointerException所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: