2012-04-17 4 views
0

私はユーザーの好きな本の見積もりを取得するアプリケーションを作成しようとしていますが、私はこの情報をユーザーに表示する方法に固執しています。私はすべての情報を格納するArrayListを作成しました。この情報を表示するときしかし、私はエラーを取得しておいてください。それは、コード配列リストヌルポインタ例外 - Android

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

を実行しようとしたとき

java.lang.NullPointerException

このクラスは次のようになります。

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

     } 


    } 

すべてのヘルプは次のようになり大いに感謝します。

答えて

6

ルック:

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

あなただけの(より典型的にはHashMap<String, String>[] tempの宣言を持っているでしょう)temp変数に NULL値を割り当てられました - あなたが買ってあげるのコースのように、 NullPointerException次の文のtemp[i]にアクセスしようとすると、

あなたがそのコードでのすべての配列を使用している理由は明らかではない - なぜあなたは単に使用されていません。

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

あなたが与えられ、ここですべてのマップを使用している理由に加え、それは不明です常に同じ2つのキーを持つことになります。なぜ名前と作成者のプロパティを持つQuoteクラスを作成しないのですか?また、ここで静的変数を使用することは悪い考えです。なぜ、getFavoritesが各呼び出しで新しいリストを作成し、メソッドの最後にそれを戻さないのですか?

+0

問題は、「temp」は最初の場所でも配列であってはならないということです。 – Tudor

+0

@ Tudor:私の答えの2番目の部分です...地図が本当に必要かどうかは不明です。 –

+0

優秀!サンプルは私の問題を解決しました:) – user983965

3

tempは配列を指しません。 nullに設定しています。

変数tempを配列として宣言しました(HashMap temp[]と書く)。

実際の配列ではなく、要素を設定することはできません。このコードでは

+1

それは* *初期化されます。listArrayList<HashMap>あるので、あなたは、ただ一つのHashMapHashMapの配列を必要としません。それは完全に有効な初期値です...それだけでは逆参照できません... –

+1

私はまだ2番目の部分の細部にびっくりします: 'temp'は変数です。その値はnullまたは配列への参照です。値がnullの場合は、要素を設定できません。 –

+0

@ジョン:確かに。私が書きたいと思っていたものの素敵な名前がありますか?どうやら "初期化"されていません。それがヌルポインタだと言う言葉? –

3

tempが間違っていると宣言しています。 - NULL値で

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