2013-07-14 2 views
-1

В данном коде ниже, я получаю NullPointerException, когда я включать для блока таким образом, чтобы использовать ArrayList слова в конструкторе ArrayAdapter. Тем не менее, если я удалить для блока и вместо того, чтобы использовать массив строк strArray, он работает просто отлично.NullPointerException при использовании ArrayList <String>

Может ли кто-нибудь сказать мне, почему это так?

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

}

ответ

3

Вам необходимо инициализировать объект слов.

words= new ArrayList<String>(); 
+0

ahaa .... так вот, где я пропустил. Спасибо .. – user2499998

2

words является унифицированным, но вы можете добавить объекты к нему.

Вы должны сделать

words = new ArryList<String>(); 

перед входом в цикл.

И я бы привыкают объявить такую ​​переменную, как

List<String>words 

вместо

ArrayList<String>words. 

List в интерфейсе, и вы можете передавать произвольные списки других функций, но если вы укажете ArrayList, вы можете передавать только такие списки. Для этого не важно, хотя.

+0

спасибо за отзыв .... :) – user2499998

0

Инициализировать слова 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"}; 
+0

oo .... спасибо. вторая проблема была опечаткой. Спасибо, что указали. Я внес необходимые изменения. .. – user2499998

Смежные вопросы