我正在尝试进行一个设置菜单,将显示一个MultiSelectListPreference,从您的联系人列表中选择多个联系人.
在这一刻,我收到一个NullPointerException,当我尝试MultiSelectListPreference#setEntryValue(CharSequence [])如果我把setEntries放在第一位,那一个抛出相同的异常.
我已经放了一个断点,一步一步看到会发生什么.变量被填充,因为它们存储字符串,它们可以包含一个字符串“null”,所以我猜它没有失败,如果没有Display_Name可用等等.
我基于findPreference的例子为this answer
任何人都有想法?如果您需要更多信息,请告诉我.谢谢阅读!
package be.wdk.sendtowork;contactNumberArray import android.database.Cursor; import android.os.Bundle; import android.preference.MultiSelectListPreference; import android.preference.PreferenceFragment; import android.provider.ContactsContract; import android.util.Log; import android.widget.Toast; public class PreferenceClass extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Integer countContacts = 0; String[] projection = new String[]{ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.PHOTO_URI }; String selection = ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER; String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME; try { Cursor c1 = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,projection,selection,null,sortOrder); c1.moveToFirst(); Integer c1columncount = c1.getColumnCount(); Integer c1count = c1.getCount(); Toast toastje = Toast.makeText(getActivity(),c1columncount.toString() + " - " + c1count.toString(),Toast.LENGTH_SHORT); toastje.show(); CharSequence[] contactNameArray = new CharSequence[c1count],contactNumberArray = new CharSequence[c1count]; MultiSelectListPreference mslp = (MultiSelectListPreference) findPreference("contactList"); do { contactNameArray[countContacts] = c1.getString(0) + " - " + c1.getString(2); contactNumberArray[countContacts] = c1.getString(1); countContacts += 1; } while(c1.moveToNext()); mslp.setEntryValues(contactNumberArray); //<- line that throws the error mslp.setEntries(contactNameArray); addPreferencesFromResource(R.xml.preferences); } catch (Exception e) { Log.v("TAG"," " + e.toString()); e.getMessage(); } } }
编辑:好的,我做了更多的检查.
– 我在我的XML中做了一个测试偏好,并使用findPrefence使它的一个对象与 – >返回NULL
– 我已经将我的MultiSelectListPreference的键设置为@ string / test,将其放在我的strings.xml中,findpreference仍然返回Null.
我的PreferenceFragment可能有问题吗?
解决方法
好的,我发现我的问题是什么.
MultiSelectListPreference mslp = (MultiSelectListPreference) findPreference("contactList");
返回NULL因为
addPreferencesFromResource(R.xml.preferences);
在开始时没有完成,所以没有加载我的偏好.