0

我正在尝试创建一个应用程序来检索用户最喜欢的书名,但是我一直坚持如何将这些信息显示给用户。我创建了一个 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]);

        }


    }

任何帮助将不胜感激。

4

3 回答 3

6

看看这段代码:

HashMap<String,String> temp[] = null; 
temp[i] = new HashMap<String,String>();

刚刚为变量分配了一个空值temp(通常会声明) - 因此,当您尝试访问下一条语句时,您HashMap<String, String>[] temp当然会得到一个。NullPointerExceptiontemp[i]

目前尚不清楚为什么您在该代码中使用数组 - 为什么不只是使用:

HashMap<String, String> map = new HashMap<String, String>();
map.put("Author", quoteArray[2]);
map.put("Quote", quoteArray[4]);
list.add(map);

此外,还不清楚你为什么在这里使用地图,因为它总是有相同的两个键。为什么不创建一个Quote具有 name 和 author 属性的类?此外,在这里使用静态变量似乎是个坏主意——为什么不在getFavorites每次调用时创建一个新列表,并在方法结束时返回它?

于 2012-04-17T17:30:29.013 回答
3

temp不指向数组。您将其设置为null.

您将变量 temp 声明为数组(通过写入HashMap temp[])。

如果它不是一个实际的数组,则不能设置任何元素。

于 2012-04-17T17:30:25.367 回答
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);
于 2012-04-17T17:31:01.107 回答