【问题标题】:Why does the following lines of code throw an IllegalStateException? [duplicate]为什么以下代码行会抛出 IllegalStateException? [复制]
【发布时间】:2019-12-01 20:41:12
【问题描述】:

我想使用 java 的 ServerSocketSocket 类将 android 应用程序连接到服务器。 我在客户端使用以下行连接到服务器:

var socket = new Socket(InetAddress.getByName("192.168.1.21"), 59090);

(“192.168.1.21”是我电脑的ip) 现在,当我打开一个简单的 java 项目文件时,它正在工作,但是当我在一个 android 项目中尝试这条线并通过模拟器运行它时,它会抛出上述异常并崩溃。 有人知道为什么吗?

【问题讨论】:

  • 请编辑您的问题并发布与崩溃相关的完整堆栈跟踪。
  • 请不要发布代码、XML 或 logcat 输出的屏幕截图。请将所有文本作为文本发布。
  • 查看NetworkOnMainThreadException

标签: java android sockets


【解决方案1】:

您需要创建 AsyncTask 并在 AsyncTask 中创建新的 Socket。您不能在 UI 主线程内进行网络调用。

【讨论】:

    【解决方案2】:

    堆栈跟踪显示问题是引发了 NetworkOnMainThreadException。

    该异常的documentation 表示您无法在主线程上执行网络操作。

    至于我怎么知道去哪里看:堆栈跟踪表明 IllegalStateException 是由 InvocationTargetException 引起的,而 InvocationTargetException 是由 NetworkOnMainThreadException 引起的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2019-11-23
      • 2012-04-23
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多