Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么调用notifyDataSetChanged时发生NullPointerException?_Java_Android_Listview_Android Listview - Fatal编程技术网

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

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

我试图在Android中更新数据时更新ListView

我使用
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));