【问题标题】:Android Preferences - ListPreference from database not workingAndroid Preferences - 来自数据库的 ListPreference 不起作用
【发布时间】:2013-04-16 05:36:24
【问题描述】:

我正在努力将首选项添加到我的应用程序中,一切都很好,直到我尝试从数据库中获取一个数组以加载到 ListPreference 中。我正在使用两个单独的数组,on 用于条目,on 用于 entryValues。一切都很好,直到我尝试将 CharSequence[] 传递给 setEntries 并设置 entryValues 函数。

代码如下:

public class EditPreferences extends PreferenceActivity {
private SQLiteDatabase db;
private TimesheetDatabaseHelper dbHelp = new TimesheetDatabaseHelper(this);

@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preference_activity);

    ListPreference projectsList = (ListPreference)findPreference("@string/perfProjectKey");
    /** Open the database table for reading and writing */
    db = dbHelp.getReadableDatabase();
    String getProjects = "select _id, name from projects;";

    Cursor cu = db.rawQuery(getProjects, null);
    Log.d("Database call:", "Success");
    Log.d("Database Rows Returned:", String.valueOf(cu.getCount()));

    List<String> entries = new ArrayList<String>();
    List<String> entryValues = new ArrayList<String>();

    if(cu != null && cu.getCount() > 0){
        cu.moveToFirst();

        do {
            entries.add(cu.getString(1));
            entryValues.add(Integer.toString(cu.getInt(0)));
        } while (cu.moveToNext());

    }
    cu.close();
    db.close();
    Log.d("Out of the loop", "and probably closed");

    final CharSequence[] entryCharSeq = entries.toArray(new CharSequence[entries.size()]);
    final CharSequence[] entryValsChar = entryValues.toArray(new CharSequence[entryValues.size()]);
    Log.d("Past the cast", "maybe we work?");
    Log.d("Entries size:", Integer.toString(entries.size()));
    Log.d("Entry Values size:", Integer.toString(entryValues.size()));

    projectsList.setEntries(entryCharSeq);
    Log.d("We got here:", "TRUE!");
    projectsList.setEntryValues(entryValsChar);

}

}

根据堆栈跟踪,如果需要,我可以发布,它是第 55 行的 nullPointerException,而 55 是

projectsList.setEntries(entryCharSeq);

我不知道怎么了。希望有人可以提供帮助。

【问题讨论】:

    标签: android android-preferences


    【解决方案1】:

    改变

    ListPreference projectsList = (ListPreference)findPreference("@string/perfProjectKey");
    

    ListPreference projectsList = (ListPreference)findPreference(getString(R.string.perfProjectKey));
    

    【讨论】:

    • 非常感谢。我已经被困在这太久了。现在,你能告诉我为什么它有效吗?对我来说这似乎没什么大不了的。
    • 在您的原始代码中,您尝试查找首选项的字面名称@string/perfProjectKey,但您确实希望该名称是存储在 string.xml 名称 perfProjectKey 中的名称,这就是 getString 的作用。
    • 啊,好吧,有道理。我没有考虑那样的字符串。非常感谢!
    • @David Manpearl 谢谢你,你到了。
    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多