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

変数に null 値を割り当て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);

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

于 2012-04-17T17:30:29.013 に答える
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);
于 2012-04-17T17:31:01.107 に答える
3

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

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

実際の配列でなければ、要素を設定することはできません。

于 2012-04-17T17:30:25.367 に答える