我有一个UI,其中包含一个按钮和一个包含一些数据的列表。当用户在加载列表之前单击按钮时,它会给出NPE。我添加了这样的空检查,以防止崩溃。
//here cardData is the List which needs load.
if (cardData != null) {
for (CardDisplayData display : cardData) {
// do something
}
}
我在onCreate
结束时这样做了 new FetchData().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).get();
我删除了空检查并替换了执行程序。现在,列表数据在打开UI之前加载,并且不再发生崩溃。但是,当UI首先加载然后实现按钮监听器时,这会降低性能。
我的异步任务,
private class FetchData extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
displayData(); // here is the data that needs to be displayed
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
try {
Collections.sort(cardData);
} catch (IllegalStateException ise) {
LOG.warn("Illegal state exception, ignoring it {}", ise);
}
PrintStockAdapter adapter = new PrintStockAdapter(getApplicationContext(), cardData);
details.setAdapter(adapter); //details is a listView
adapter.notifyDataSetChanged();
}
}
答案 0 :(得分:0)
试试这个:
if (cardData.lenght > 0) {
for (CardDisplayData display : cardData) {
// do something
}
}