Java 为什么调用notifyDataSetChanged时发生NullPointerException?
我试图在Android中更新数据时更新ListView 我使用Java 为什么调用notifyDataSetChanged时发生NullPointerException?,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我试图在Android中更新数据时更新ListView 我使用mledevicelistapter.addRSSIandAddress(“20”)将值设置为addRSSIandAddress函数 在addRSSIandAddress中,它接收值并调用mLeDeviceListAdapter.notifyDataSetChanged()。但是空点异常发生在viewHolder.deviceRssi.setText(“RSSI:+String.valueOf(mrssi)) 似乎视图持有者.devi
mledevicelistapter.addRSSIandAddress(“20”)
将值设置为addRSSIandAddress
函数
在addRSSIandAddress
中,它接收值并调用mLeDeviceListAdapter.notifyDataSetChanged()代码>。但是空点异常发生在viewHolder.deviceRssi.setText(“RSSI:+String.valueOf(mrssi))代码>
似乎视图持有者.deviceRssi
为空或视图持有者
为空
ListView
和适配器的代码如下所示:
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;
}
专用LEDEVICELISTAPTER MLEDVICELISTAPTER;
私有静态ListView设备\u列表;
mLeDeviceListAdapter=新的LeDeviceListAdapter(getActivity());
设备列表设置适配器(mLeDeviceListAdapter);
公共类LeDeviceListAdapter扩展BaseAdapter{
私人公寓;
阵列列表设备;
私有字符串mrssi;
公共LeDeviceListAdapter(上下文){
//TODO自动生成的构造函数存根
mInflator=LayoutInflater.from(上下文);
}
专用void addRSSIandAddress(字符串rssi){
//TODO自动生成的方法存根
mrssi=rssi;
mLeDeviceListAdapter.notifyDataSetChanged();
}
@凌驾
公共视图getView(最终整数位置、视图视图、视图组父视图){
//TODO自动生成的方法存根
最终持票人;
Log.d(标签“getView”);
如果(视图==null){
视图=最小充气(R.layout.device\u list,空);
viewHolder=新的viewHolder();
viewHolder.deviceRssi=(TextView)view.findViewById(R.id.device\u rssi);
}否则{
viewHolder=(viewHolder)view.getTag();
viewHolder.deviceRssi.setText(“RSSI:+String.valueOf(mrssi));
}
返回视图;
}
}
静态类视窗夹{
文本视图设备;
}
如何解决这个问题?提前感谢。您可以使用:
viewHolder=(viewHolder)view.getTag()代码>
但是你在什么地方设置标签了吗?我不这么认为
希望有帮助尝试以下代码:
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));
正如其他人所说。我想你忘了设置
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;
在else部分中尝试这一行:viewHolder.deviceRssi.setText(“RSSI:+String.valueOf(mrssi));