我偶尔会在我的ArrayAdapter中获得NullPointerException
来填充我的ListFragment。似乎getActivity()
返回null,但据我所知它不应该这样做。
适配器代码inflater = (LayoutInflater)...
是例外行:
@Override
public View getView( int position, View convertView, ViewGroup parent )
{
view = convertView;
if ( view == null )
{
/* Inflate a row */
inflater = (LayoutInflater)getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE ); // THIS IS THE EXCEPTION LINE
view = inflater.inflate( R.layout.pairing_list_row, parent, false );
}
我正在使用Loader来获取数据,并且在onActivityCreated
方法之前我不会初始化它。在加载器加载完成之前不会创建适配器,因此它永远不会发生在onActivityCreated
之前。
@Override
public void onActivityCreated( Bundle savedInstanceState )
{
super.onActivityCreated( savedInstanceState );
getLoaderManager().initLoader( 0, null, this );
}
@Override
public void onLoadFinished( Loader<Cursor> loader, Cursor cursor )
{
PairingArrayAdapter pairings = (PairingArrayAdapter)getListAdapter();
if ( pairings == null )
{
pairings = new PairingArrayAdapter( getActivity(), R.layout.pairing_list_row );
setListAdapter( pairings );
}
...
有关导致NullPointerException的原因的任何想法?它不会一直发生,只发生一次,我再次做同样的事情而且不会发生。我无法理解。
答案 0 :(得分:0)
我已经确定唯一可能的解释是,在某些情况下片段分离时,我正在使用的FragmentStatePagerAdapter
会导致onLoadFinished
被调用,因此需要检查附件运行getView
时的活动。
答案 1 :(得分:0)
在Dataset<Row> processByRowUpdate(Dataset<Row> dsRecords, SparkSession sparkSession) {
List<Row> rows = dsRecords.select("accountIdentifier", "accountNumber").collectAsList();
List<MongoRecord> newRows = new ArrayList<MongoRecord>();
ListIterator<Row> it = rows.listIterator();
boolean errorOccurred = false;
while (it.hasNext()) {
try {
Row record = it.next();
MongoRecord mongo = new MongoRecord();
if (!record.isNullAt(record.fieldIndex("accountIdentifier")))
mongo.setAccountIdentifier(String.valueOf(record.getDouble(record.fieldIndex("accountIdentifier"))));
//... and so on
newRows.add(mongo);
} catch (Exception exception) {}
sparkSession.createDataFrame(newRows, MongoRecord.class);
内,使用ArrayAdapter.getView()
代替getContext()
。
getActivity()
有时可以在“活动”轮播期间短暂返回getActivity()
,而null
在同一情况下不会返回getContext()
。 Android 4.2,4.1及更低版本会出现此问题。