我一直在 ListView 中收到 NullPointerException

I keep getting a NullPointerException in ListView

当我 运行 我的应用程序时出现 NullPointerException:

LogCat

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at org.example.km.json3.Helper.SwipeListAdapter.getView(SwipeListAdapter.java:52)

class如下:

public class SwipeListAdapter extends BaseAdapter {

    private Activity activity;
    private LayoutInflater layoutInflater;
    private List<StockDetails> listStockDetails;


    public SwipeListAdapter(Activity activity, List<StockDetails> listStockDetails) {
        this.activity = activity;
        this.listStockDetails = listStockDetails;

    }

    @Override
    public int getCount(){
        return listStockDetails.size();
    }
    @Override
    public Object getItem(int position) {
        return listStockDetails.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(layoutInflater == null) {
            layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        if(convertView == null){
            layoutInflater.inflate(R.layout.list_row, null);
        }
//This is the line number : 52

            TextView txtStockId = (TextView) convertView.findViewById(R.id.txtStockId);
            TextView txtStockTag = (TextView) convertView.findViewById(R.id.txtStockTag);
            TextView txtStockExchange = (TextView) convertView.findViewById(R.id.txtStockExchange);
            TextView txtStockRate = (TextView) convertView.findViewById(R.id.txtStockRate);
            TextView txtStockChange = (TextView) convertView.findViewById(R.id.txtStockChange);
            TextView txtStockChangePercent = (TextView) convertView.findViewById(R.id.txtStockChangePercent);
            TextView txtStockPreviousClosing = (TextView) convertView.findViewById(R.id.txtStockPreviousClosing);

            txtStockId.setText(listStockDetails.get(position).id);
            txtStockTag.setText(listStockDetails.get(position).t);
            txtStockExchange.setText(listStockDetails.get(position).e);
            txtStockRate.setText(listStockDetails.get(position).l);
            txtStockChange.setText(listStockDetails.get(position).c);
            txtStockChangePercent.setText(listStockDetails.get(position).cp);
            txtStockPreviousClosing.setText(listStockDetails.get(position).pcls_fix);

        return convertView;
    }
}

改变

if(convertView == null){
    layoutInflater.inflate(R.layout.list_row, null);
}

if(convertView == null){
    convertView = layoutInflater.inflate(R.layout.list_row, null);
}

由于 Views 是在第一次调用 getView() 时创建的(还没有 View 可以重复使用),因此您的 convertView 为空。

您正在为这种情况正确地扩充布局...但是,您没有保存返回的 View。这样,convertView 保持为空,convertView.findViewById() 产生一个空指针异常