我正在尝试创建一个检索用户喜欢的书籍报价的应用程序但是我仍然坚持如何将这些信息显示给用户。我创建了一个ArrayList,它将存储所有信息。但是,在显示此信息时,我不断收到错误:
显示java.lang.NullPointerException
尝试执行代码时
temp[i] = new HashMap<String,String>();
此课程如下所示:
public class FavouriteQuotesActivity extends ListActivity {
static final ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
private void getFavorites() {
DataBaseHelper myDbHelper = new DataBaseHelper(this);
String favorites [] = myDbHelper.getFavourites();
if(list.size() > 0)
{
list.removeAll(list);
}
for(int i = 0;i < favorites.length; i++)
{
String quotes = favorites[i];
String[] quoteArray = quotes.split(":");
HashMap<String,String> temp[] = null;
temp[i] = new HashMap<String,String>();
temp[i].put("Author",(quoteArray[2]));
temp[i].put("Quote",(quoteArray[4]));
list.add(temp[i]);
}
}
非常感谢任何帮助。
答案 0 :(得分:6)
看看这段代码:
HashMap<String,String> temp[] = null;
temp[i] = new HashMap<String,String>();
你刚刚为temp
变量分配一个空值(通常会声明HashMap<String, String>[] temp
) - 所以当然你会得到一个NullPointerException
当您尝试在下一个语句中访问temp[i]
时。{/ p>
目前尚不清楚为什么你在该代码中使用了一个数组 - 为什么你不只是使用:
HashMap<String, String> map = new HashMap<String, String>();
map.put("Author", quoteArray[2]);
map.put("Quote", quoteArray[4]);
list.add(map);
另外,目前还不清楚为什么你在这里使用地图,因为它总是有相同的两个键。为什么不创建一个具有名称和作者属性的Quote
类?此外,在这里使用静态变量似乎是一个坏主意 - 为什么getFavorites
不在每次调用时创建一个新列表,并在方法结束时返回它?
答案 1 :(得分:3)
temp
未指向数组。您将其设置为null
。
您将变量temp声明为数组(通过编写HashMap temp[]
)。
如果不是实际数组,则无法设置任何元素。
答案 2 :(得分:3)
您正在声明并使用temp
错误。您不需要一个HashMap
数组,只需一个HashMap
,因为list
是ArrayList<HashMap>
:
HashMap<String,String> temp = new HashMap<String,String>();
temp.put("Author",(quoteArray[2]));
temp.put("Quote",(quoteArray[4]));
list.add(temp);