我目前正在尝试制作一个设置菜单,其中将显示MultiSelectListPreference
,以从联系人列表中选择多个联系人。
此时,当我尝试使用MultiSelectListPreference#setEntryValue(CharSequence[])
时,我收到一个NullPointerException
。如果我先放置setEntries
,那么它也会抛出相同的异常。
我设置了断点,逐步查看发生了什么。变量已填充,因为它们存储Strings
,它们可以包含一个String
"null",所以我猜测如果没有可用的Display_Name
之类的东西,则不会失败。
我基于这个答案中的示例进行了findPreference。
有人有想法吗?如果需要更多信息,请告诉我。谢谢阅读!
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中创建了一个测试preference,并使用findPreference将其转换为对象以进行操作-> 返回NULL。 - 我已将我的MultiSelectListPreference键设置为@string/test,并将其放入strings.xml中,但findPreference仍然返回Null。
我的PreferenceFragment可能有问题吗?
findPreference("contactList")
返回的是真实值,而不是null
吗? - Archertitle
到PreferenceCategory
而没有添加key:-(,确保你也添加了keyandroid:key="pre_item_key"
并通过key进行查找。 - Hossain Khan