Java 无法确定NetworkOnMainThreadException出现空消息的原因

Java 无法确定NetworkOnMainThreadException出现空消息的原因,java,android,multithreading,Java,Android,Multithreading,在我的Android应用程序中登录时,我正在运行一个对API的POST请求,以获取用户信息并验证其帐户是否存在。当我尝试这样做时,出现了一个NetworkOnMainThreadException logger.log(Level.INFO, "POST request URL: "+this.getUrl()); URL url = new URL(this.getUrl()); HttpURLConnection connection = (HttpURLConnection) url.op

在我的Android应用程序中登录时,我正在运行一个对API的POST请求,以获取用户信息并验证其帐户是否存在。当我尝试这样做时,出现了一个
NetworkOnMainThreadException

logger.log(Level.INFO, "POST request URL: "+this.getUrl());
URL url = new URL(this.getUrl());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
logger.log(Level.INFO, "Connection open");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-8");
connection.setUseCaches(false);

OutputStream outputStream = connection.getOutputStream();
DataOutputStream wr = new DataOutputStream(outputStream); //ERROR HAPPENS HERE
该异常实际上有一条空错误消息。通过对该异常的研究,我发现这似乎是一个线程问题,我在与此POST请求相同的线程上运行UI。这是真的吗


我在一个运行在Glassfish上的基于web的应用程序上使用了同样的方法,效果很好。

是的,这是真的。在GUI线程中运行IO不是一个好主意。这就是为什么如果你试图在GUI线程中进行网络操作,Android会抛出错误。另请参见引发此异常的原因


解决这个问题的方法很简单,就是进行网络操作。

是的,确实如此。在GUI线程中运行IO不是一个好主意。这就是为什么如果你试图在GUI线程中进行网络操作,Android会抛出错误。另请参见引发此异常的原因


解决这个问题的方法很简单,就是进行网络操作。

在API 11之前,您可以这样做,尽管它总是很糟糕。原因是在主UI线程上执行网络操作会阻塞UI,并可能导致ANR(应用程序无响应)错误。为了实现这一点,如果在主线程上尝试任何网络活动,API11将抛出您看到的异常。这是一个Android的东西(Android.os.NetworkOnMainThreadException),而不是Java的东西,因此在Glassfish上没有并行性。在API 11之前,你可以这样做,尽管它总是不好的。原因是在主UI线程上执行网络操作会阻塞UI,并可能导致ANR(应用程序无响应)错误。为了实现这一点,如果在主线程上尝试任何网络活动,API11将抛出您看到的异常。它是Android的东西(Android.os.NetworkOnMainThreadException),不是Java的东西,因此在Glassfish上没有并行性。我在阅读异步任务文档时回答了我自己的问题。我在阅读异步任务文档时回答了我自己的问题。