與ArrayList的填充ArrayAdapter當我初始化一個ArrayList,的NullPointerException在的AsyncTask
ArrayList<Episode> episodes = new ArrayList<Episode>(32);
然後填寫該列表異步通過輪詢的RSS feed。
當異步調用,onPostExecute
S,我通過populateList
與情節:
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
populateList(episodes);
}
其中傳遞ArrayList
到定製ArrayAdapter
,EpisodeAdapter
。
public void populateList(ArrayList<Episode> episodes) {
episodeAdapter = new EpisodeAdapter(getContext(), R.layout.row_episodes, episodes);
mList.setAdapter(episodeAdapter);
}
感謝新崩潰報告,我開始意識到多麼頻繁,這導致NullPointerExceptions
...經常(但我似乎無法在本地重現!)。
根據我使用的是當時的修復,堆棧跟蹤看起來是這樣的:
java.lang.NullPointerException:
at android.view.LayoutInflater.from(LayoutInflater.java:234)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:178)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:163)
at com.workingagenda.democracydroid.Adapters.EpisodeAdapter.<init>(EpisodeAdapter.java:47)
at com.workingagenda.democracydroid.MainActivity$PodcastFragment.populateList(MainActivity.java:236)
at com.workingagenda.democracydroid.MainActivity$PodcastFragment$GetAudioFeed.onPostExecute(MainActivity.java:590)
at com.workingagenda.democracydroid.MainActivity$PodcastFragment$GetAudioFeed.onPostExecute(MainActivity.java:545)
我試過很多東西,以減少交通事故數量,即檢查我打電話populateList
前ArrayList episodes
.size()
不是0(我始終認爲這是因爲我將它初始化爲32的長度)。或者,裏面populateList
我檢查,看看是否第一項是null
(如:
if (episodes.get(0) != null){
episodeAdapter = new EpisodeAdapter(getContext(), R.layout.row_episodes, episodes);
mList.setAdapter(episodeAdapter);
}
但後來有時我得到一個java.lang.IndexOutOfBoundsException
(但有時仍NullPointerException
如何防止應用程序崩潰。如果發作是因爲某些原因沒有被異步調用填充?
我應該將適配器的getView()
方法內檢查空呢?
檢查null的第一個項目沒有任何意義嗎?或者我應該檢查與檢查ArrayList的size()
?
是檢查第一個元素不爲空不會做出很大的區別第一u能在這之後所有的u檢查的ArrayList不低於檢查ArrayList的大小大於0空在使用這些值之前可以檢查Episode模型類沒有任何空值 –
所以我需要檢查三件事情,我應該在哪裏檢查它們?我以爲Arraylist永遠不會是空的,因爲我確實初始化了它? – Nevermore
我認爲,如果您使用的是異步任務,您的ListView可能沒有按照正確的順序初始化。 –