DatagramSocket - java.lang.NullPointerException [Android] [重复]

Posted

技术标签:

【中文标题】DatagramSocket - java.lang.NullPointerException [Android] [重复]【英文标题】:DatagramSocket - java.lang.NullPointerException [Android] [duplicate] 【发布时间】:2017-10-28 19:00:23 【问题描述】:

我创建了一个类TFTPClient,它允许用户连接到服务器并能够通过类方法发出某些请求。我已经在 android Studio 之外创建并测试了它,但是当我传输和编译我的代码时出现错误。该错误是在MainActivity.java中引起的,但不是在创建类对象时引起的,而是在调用某些方法时引起的

TFTPClient c = new TFTPClient(); //Works fine

try 
    c.sendAndReceive(); //Get the error
 catch (UnknownHostException e) 
    e.printStackTrace();

这里是 sendAndReceive 方法代码

public void sendAndReceive() throws UnknownHostException 
    int sendPort;
    sendPort = SERVER_RECV_PORT; //(60700)
    int clientConnectionPort = -1;
    InetAddress serverAddress = InetAddress.getByName("172.17.49.153");

    try 
        clientConnectionPort = sendRequest(serverAddress, sendPort, "all");
    
    catch (IOException e) 
        //System.out.println("error");
    
    receive(serverAddress, clientConnectionPort);

【问题讨论】:

【参考方案1】:

您确定申请了互联网许可吗?根据Finley Smith 的说法,在旧版本的android 中,它不允许您在未经许可的情况下访问互联网。 您可以通过将这行代码放在 AndroidManifest 文件中来添加 Internet 权限:

<uses-permission android:name="android.permission.INTERNET" />

另外,您能否从 LogCat 发送错误消息,以便下次提供更多信息,谢谢!

【讨论】:

你错了。 You still need the internet permission。即使是最新的文档也说明了这一点。 The docs on the internet permission says it isn't deprecated 表示它仍然是必需的。不推荐在更高版本中使用的权限,但不会删除以保持向后兼容性。无论哪种方式,您都需要互联网许可,不管是什么版本 如果我们知道究竟是什么错误仍然是最好的。 当您有足够的声誉时,您可以通过评论来做到这一点。同时,确保即使来源指向 Google Play 而不是 Android 操作系统本身,您也不要过分依赖答案。现在这是一个带有错误信息的答案,这个问题是重复的和离题的,因为它没有 MCVE。而不是本质上添加一个美化的评论作为答案,其中有一部分是错误的 以后我会记住这一点的,谢谢!

以上是关于DatagramSocket - java.lang.NullPointerException [Android] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

DatagramSocket.receive()不止一次被调用

为啥 DatagramSocket 在某些电脑中不发送

DatagramSocket(UDP协议)

DatagramSocket客户端与服务端Java实例

DatagramSocket.send 线程安全吗?

DatagramSocket - java.lang.NullPointerException [Android] [重复]