调用notifyDataSetChanged时为什么会发生NullPointerException?

时间:2014-11-12 11:38:43

标签: java android listview android-listview

我正在尝试在Android中更新数据时更新ListView。

我使用mLeDeviceListAdapter.addRSSIandAddress("20");将值设置为addRSSIandAddress函数。

addRSSIandAddress中,它会收到值并致电mLeDeviceListAdapter.notifyDataSetChanged();。但 NullPointerException 发生在 viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));

似乎 viewHolder.deviceRssi null viewHolder null

ListViewAdapter的代码如下所示:

private LeDeviceListAdapter mLeDeviceListAdapter;
private static ListView device_list;
mLeDeviceListAdapter = new LeDeviceListAdapter(getActivity());
device_list.setAdapter(mLeDeviceListAdapter);

    public class LeDeviceListAdapter extends BaseAdapter{

                private LayoutInflater mInflator;

    ArrayList<BluetoothDevice> mLeDevices;
            private String mrssi;

            public LeDeviceListAdapter(Context context) {
                // TODO Auto-generated constructor stub
                mInflator = LayoutInflater.from(context);
            }

            private void addRSSIandAddress(String rssi) {
                // TODO Auto-generated method stub
                mrssi = rssi;
                mLeDeviceListAdapter.notifyDataSetChanged();
            }

            @Override
            public View getView(final int position, View view, ViewGroup parent) {
                // TODO Auto-generated method stub

                final ViewHolder viewHolder;
                Log.d(TAG, "getView");
                if(view == null){
                    view = mInflator.inflate(R.layout.device_list, null);
                    viewHolder = new ViewHolder();

                    viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi);

                }else {
                    viewHolder = (ViewHolder) view.getTag();
                    viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));
                }

                return view;
            }

        }
        static class ViewHolder {
            TextView deviceRssi;
        }

如何解决这个问题?提前谢谢。

3 个答案:

答案 0 :(得分:1)

正如其他人所说的那样。我想你忘了设置

view.setTag(viewHolder).

尝试将此行放在此代码中

if(view == null)
{
    view = mInflator.inflate(R.layout.device_list, null);
    viewHolder = new ViewHolder();

    viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi);

    view.setTag(viewHolder); //THE CODE

}
else 
{
     viewHolder = (ViewHolder) view.getTag();
     viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));

}

                    return view;

答案 1 :(得分:0)

您使用:

viewHolder = (ViewHolder) view.getTag();

但你在setTag某个地方吗?我不这么认为。

希望有所帮助

答案 2 :(得分:0)

尝试使用以下代码:

if(view == null){
   view = mInflator.inflate(R.layout.device_list, null);
   viewHolder = new ViewHolder();
   viewHolder.deviceRssi = (TextView) view.findViewById(R.id.device_rssi);
   view.setTag(viewHolder);

}else {
    viewHolder = (ViewHolder) view.getTag();                 
}
viewHolder.deviceRssi.setText("RSSI:" + String.valueOf(mrssi));