Java 使用ArrayList时出现NullPointerException<;字符串>;

Java 使用ArrayList时出现NullPointerException<;字符串>;,java,nullpointerexception,runtime-error,Java,Nullpointerexception,Runtime Error,在下面给定的代码中,当我包含for block以便在ArrayAdapter构造函数中使用ArrayList单词时,我得到了NullPointerException。但是,如果我删除块的,而是使用字符串数组strArray,它就可以正常工作 谁能告诉我为什么会这样 import java.util.ArrayList; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter

在下面给定的代码中,当我包含for block以便在ArrayAdapter构造函数中使用ArrayList单词时,我得到了
NullPointerException
。但是,如果我删除块
,而是使用字符串数组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);
}
import java.util.ArrayList;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.ArrayAdapter;
导入com.actionbarsherlock.app.SherlockListFragment;
公共类ShowList扩展了SherlockListFragment
{
私有静态最终字符串[]strArray={“this”、“one”、“is”、“an”、“experimental”、“list”};
ArrayList词;
阵列适配器;
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
用于(字符串s:strArray)
{
字。加上(s);
}
adapter=newarrayadapter(getActivity(),android.R.layout.simple\u list\u item\u 1,words);
Log.d(“操作”,“在setListAdapter之前”);
setListAdapter(适配器);
}
工作正常的代码如下:

 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);
}
public类ShowList扩展了SherlockListFragment
{
私有静态最终字符串[]strArray={“this”、“one”、“is”、“an”、“experimental”、“list”};
ArrayList词;
阵列适配器;
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
/*用于(字符串s:strArray)
{
字。加上(s);
}
*/
adapter=newarrayadapter(getActivity(),android.R.layout.simple\u list\u item\u 1,strArray);
Log.d(“操作”,“在setListAdapter之前”);
setListAdapter(适配器);
}

}您需要初始化对象单词

words= new ArrayList<String>();
words=newarraylist();

单词
是单位化的,但您可以向其中添加对象

你必须这样做

words = new ArryList<String>();
words=newarrylist();
在你进入循环之前

我会习惯于声明这样一个变量

List<String>words
列表词
而不是

ArrayList<String>words.
ArrayListwords。

List
在接口中,您可以将任意列表传递给其他函数,但如果您特别指定了
ArrayList
,则只能传递此类列表。不过,对于此exmaple,这并不重要。

初始化ArrayList单词;首先:

private ArrayList<String> words = new ArrayList<String>();  
似乎未编译。请将其更改为:

private static final String[] strArray =  {"this", "one", "is", "an", "experimental", "list"};

哦…谢谢。第二个问题是打字错误。谢谢你指出。我已经做了必要的修改。。
private static final String[] strArray =  {"this", "one", "is", "an", "experimental", "list"};