空指针异常问题

空指针异常问题

public class UdpClientBiz {

    //服务器IP
    private String mServerIp = "192.168.95.2";
    //服务器端口号
    private int mServerPort = 7777;
    //服务器的InetAddress
    private InetAddress mServerAddress;
    //DatagramSocket
    private DatagramSocket datagramSocket;

    public UdpClientBiz() {
        try {
            //通过服务器IP获取服务器的InetAddress对象
            mServerAddress = InetAddress.getByName(mServerIp);
            //实例化DatagramSocket对象
            this.datagramSocket = new DatagramSocket();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    //用来处理服务器返回的数据
    public interface OnReturnedMsgListener {
        void handleMsg (String msg);
    }

    //向服务器发送、接收数据
    public void sendAndReceiveMsg (final String msg, final OnReturnedMsgListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //发送数据到服务器
                    byte[] clientMsgBytes = msg.getBytes();
                    DatagramPacket clientPacket = new DatagramPacket(clientMsgBytes, clientMsgBytes.length,
                            mServerAddress, mServerPort);
                    datagramSocket.send(clientPacket);
                    //从服务器接收数据
                    byte[] buf = new byte[1024];
                    DatagramPacket serverMsgPacket = new DatagramPacket(buf, 0, buf.length);
                    datagramSocket.receive(serverMsgPacket);
                    //处理从服务器接收的数据
                    listener.handleMsg(new String(serverMsgPacket.getData()));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

在执行

datagramSocket.send(clientPacket);

的时候报了一个DatagramSocket的空指针异常,为何?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2018-03-17 23:05:38

那你得看一下是不是datagramSocket为空了?UdpClientBiz()时有没有发生异常, this.datagramSocket = new DatagramSocket();没有赋值成功。是不是它导致的。祝:学习愉快

  • 提问者 轻风起自远东QAQ #1
    我设置断点看,this.datagramSocket = new DatagramSocket();这步执行完之后datagramSocket依然是null
    2018-03-17 23:25:01
  • 那证明发生异常了吧?报的什么异常?不能说执行它了就肯定没问题!服务没打开?
    2018-03-18 22:50:01
  • 事实证明是我忘记在manifest文件中加联网权限了..但是为什么没加权限报错的是空指针异常而不是权限的异常呢..
    2018-03-19 18:56:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android数据通信开发与应用2018版
  • 参与学习           人
  • 提交作业       147    份
  • 解答问题       687    个

本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师