我不明白为什么代码中的某个地方始终为空。 此外,我没有将数据库中的字符串添加到列表
的解决方案public List<String> dbToString() {
// list where all Strings should be saved for an adapter
List<String> allNamesTodos = null;
// getting List von database with all Items
List<DB_Item> allItems = dbHelper.getAllItems();
for (int j = 0; j < allItems.size(); j++) {
// here says the code, that allNamesTodos is null...
// Null pointer access: The variable allNamesTodos can only be null at this location
allNamesTodos.add(allItems.get(j).getName());
}
return allNamesTodos;
,这是带适配器的那个:
SortItems sortTodos = new SortItems(this);
List<String> todos = sortTodos.dbToString();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.items, R.id.label, todos);
希望,你能帮帮我,谢谢你:)。
答案 0 :(得分:1)
它是null
因为您将其初始化为null,并且在实例化List
实例之前无法添加元素。你可以改变这个,
List<String> allNamesTodos = null;
到
List<String> allNamesTodos = new ArrayList<>();
或者,你可以在第一次添加 -
if (allNamesTodos == null) {
allNamesTodos = new ArrayList<>();
}
// Then you can add elements.
allNamesTodos.add(allItems.get(j).getName());
答案 1 :(得分:0)
variable = null
表示变量没有任何内容。 它没有对象。因此,尝试访问它,即调用其上的任何方法,就像尝试在 nothing 上调用方法一样,只需生成NullPointerException
。
您混淆了null
值,这意味着该变量不包含实际对象,而空列表 - 这是一个实际对象。
要构建空列表,请执行以下操作:
List<Stuff> list = new ArrayList<Stuff>();
比add()
事情要好。
答案 2 :(得分:0)
我(*)建议始终初始化变量,这样您就不必为空值而烦恼。如果您使用= null
替换无用的= new ...
,您的问题就会消失。
(*)我没有发明这个原则,但是很久以前在做Pascal,Fortran,Basic的过程中阅读并了解了这一点。