我一直在 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()
产生一个空指针异常
当我 运行 我的应用程序时出现 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()
产生一个空指针异常