2012-04-17 79 views
0

我试图创建一个应用程序,它检索用户最喜欢的书报价,但是我被困在如何显示这些信息回给用户。我创建了一个ArrayList来存储所有的信息。但是显示此信息时,我不断收到错误:数组列表空指针异常 - Android

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]); 

     } 


    } 

任何帮助将是:

java.lang.NullPointerException

当它试图执行

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

这个类的代码如下所示

不胜感激。

回答

6

看看这段代码:

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

您已经刚分配空值的temp变量(更一般地的HashMap<String, String>[] temp声明) - 所以当然你会得到一个NullPointerException然后在下一条语句中尝试访问temp[i]。 ,

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

此外,目前还不清楚为什么你正在使用的地图,在这里都给出:你为什么不只是使用 -

目前尚不清楚为什么你使用数组的所有代码它将始终具有相同的两个键。为什么不创建一个名称和作者属性的Quote类?另外,在这里使用一个静态变量似乎是一个坏主意 - 为什么getFavorites在每次调用时都创建一个新列表,并在该方法结束时返回它?

+0

问题在于'temp'甚至不应该是一个数组。 – Tudor 2012-04-17 17:32:40

+0

@Tudor:因此,我的答案的第二部分......目前还不清楚地图是否真的需要。 – 2012-04-17 17:33:40

+0

优秀!显示的样本解决了我的问题:) – user983965 2012-04-17 17:37:37

3

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

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

不是一个真正的数组,你不能设置任何元素。

+1

这是* *初始化 - 与空值。这是一个完全有效的初始值......它只是你不能解除引用它... – 2012-04-17 17:30:58

+1

我仍然在第二部分的细节斗嘴:'temp'是一个变量。它的值是null或对数组的引用。值为null时,不能设置任何元素。 – 2012-04-17 17:33:12

+0

@Jon:的确如此。我的意思是写一个好名字吗?显然不是“初始化”。一个说这是一个空指针的词? – 2012-04-17 17:34:06

3

您声明并使用temp错误。你不需要的HashMap数组,只是一个单一的HashMap,因为listArrayList<HashMap>

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