Wes*_*ker 11 java android nullpointerexception multi-select android-preferences
我正在尝试制作一个设置菜单,它会显示一个MultiSelectListPreference,从联系人列表中选择多个联系人.
在这一刻,我正在接受一个NullPointerException,当我尝试MultiSelectListPreference#setEntryValue(CharSequence[])如果我把第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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:好的,我做了几个检查. - 我在我的XML中创建了一个测试首选项,并使用findPrefence使它的对象可以使用 - >返回NULL - 我将我的MultiSelectListPreference的键设置为@ string/test,将它放在我的strings.xml中,findpreference仍然返回Null.
我的PreferenceFragment会出现问题吗?
Wes*_*ker 24
好的,我发现了我的问题.
MultiSelectListPreference mslp = (MultiSelectListPreference) findPreference("contactList");
Run Code Online (Sandbox Code Playgroud)
返回NULL因为
addPreferencesFromResource(R.xml.preferences);
Run Code Online (Sandbox Code Playgroud)
没有在开始时完成...所以它还没有加载我的偏好.
小智 5
您可以使用解决此问题
getFragmentManager().executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)
之前
findPreference(section);
Run Code Online (Sandbox Code Playgroud)