2016-04-30 71 views
0

我遇到了簡單的自定義列表問題。我已經嘗試了幾個例子,最終得到相同的錯誤。我不斷收到的錯誤是java.lang.NullPointerException:嘗試從空數組中讀取

顯示java.lang.NullPointerException:嘗試從空陣列讀取

適配器類別:

public class CustomList extends ArrayAdapter<String> { 

     Context context; 
     int [] images; 
     String [] titleArray; 
     String [] descriptionArray; 

     CustomList(Context context,String[] titles, int [] images, String [] description) { 
      super(context,R.layout.single_row,R.id.textView,titles); 
      this.context = context; 
      this.images = images; 
      this.descriptionArray = description; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View row = inflater.inflate(R.layout.single_row,parent, false); 

      ImageView img = (ImageView) row.findViewById(R.id.imageView); 
      TextView myTxtTitle = (TextView) row.findViewById(R.id.textView); 
      TextView myTxtDescription = (TextView) row.findViewById(R.id.textView2); 

      img.setImageResource(images[position]); 
      myTxtTitle.setText(titleArray[position]); // where error is happening? 
      myTxtDescription.setText(descriptionArray[position]); 

      return row; 
     }} 

Activity類:

public class MainActivity extends AppCompatActivity { 

    ListView list; 
    String [] name; 
    String [] sound; 
    int [] images = { 
      R.drawable.bird, 
      R.drawable.cat, 
      R.drawable.cow, 
      R.drawable.dog, 
      R.drawable.frog 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Resources res = getResources(); 
     name = res.getStringArray(R.array.title); 
     sound = res.getStringArray(R.array.description); 

     list = (ListView) findViewById(R.id.list); 

     CustomList customAdapter = new CustomList(this, name, images, sound); 
     list.setAdapter(customAdapter); 
    } 
} 

回答

4

你只是忘了分配標題數組...因此數組被空引用....

String [] titleArray; 
String [] descriptionArray; 

CustomList(Context context,String[] titles, int [] images, String [] description) 
    { 
    super(context,R.layout.single_row,R.id.textView,titles); 
    this.context = context; 
    this.images = images; 
    this.descriptionArray = description; 


    //addd this to init the array 
    this.titleArray = titles; 
    } 
+0

感謝您的反饋幫助很多 –

+0

歡迎您:) –

0

你需要空檢查。

前),如果(titleArray!= NULL),如果(descriptionArray!= NULL)

當您嘗試使用爲空的數據它發生。

+0

這個檢查不是必要的,這些對象== null檢查通常表示在我看來糟糕的代碼。當然你有時需要它,但在這種情況下不需要,因爲你只需要初始化數組,並且在任何情況下它都不會爲空 –

相關問題