-1

以下のコードでは、ArrayAdapter コンストラクターでArrayList ワードを使用するためにfor ブロックNullPointerExceptionを含めたときにを取得します。ただし、for ブロックを削除して、代わりにString 配列 strArrayを使用すると、問題なく動作します。

なぜそうなのか誰か教えてもらえますか?

 import java.util.ArrayList;
 import android.os.Bundle;
 import android.util.Log;
 import android.widget.ArrayAdapter;
 import com.actionbarsherlock.app.SherlockListFragment;

 public class ShowList extends SherlockListFragment 
 {
    private static final String[] strArray={"this","one","is","an","experimental","list"};
    ArrayList<String> words; 
    ArrayAdapter<String> adapter;
    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {

    super.onActivityCreated(savedInstanceState);

    for(String s: strArray)
    {

        words.add(s);

    }

    adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,words);
    Log.d("Action","before setListAdapter"); 
    setListAdapter(adapter);
}

正常に動作するコードは次のとおりです。

 public class ShowList extends SherlockListFragment 
 {
     private static final String[] strArray={"this","one","is","an","experimental","list"};
    ArrayList<String> words; 
    ArrayAdapter<String> adapter;
    @Override
    public void onActivityCreated(Bundle savedInstanceState)
    {

         super.onActivityCreated(savedInstanceState);

/*  for(String s: strArray)
    {

        words.add(s);

    }
*/
    adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,strArray);
    Log.d("Action","before setListAdapter"); 
    setListAdapter(adapter);
}

}

4

3 に答える 3

3

対象語を初期化する必要があります。

words= new ArrayList<String>();
于 2013-07-14T07:05:29.430 に答える
2

wordsはユニット化されていますが、それにオブジェクトを追加します。

あなたがしなければならない

words = new ArryList<String>();

ループに入る前に。

そして、私はそのような変数を宣言することに慣れます

List<String>words

それ以外の

ArrayList<String>words.

Listはインターフェイスにあり、任意のリストを他の関数にArrayList渡すことができますが、具体的に指定すると、そのようなリストしか渡すことができません。ただし、この例では問題ありません。

于 2013-07-14T07:06:18.800 に答える