HttpURLConnection 抛出异常 [重复]
Posted
技术标签:
【中文标题】HttpURLConnection 抛出异常 [重复]【英文标题】:HttpURLConnection is throwing exception [duplicate] 【发布时间】:2013-03-07 22:30:26 【问题描述】:这是我连接HTTP
的代码。
URL url = new URL("http://www.google.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
String responseMsg = con.getResponseMessage();
int response = con.getResponseCode();
这是在扔android.os.NetworkOnMainThreadException
请帮忙。
【问题讨论】:
将你的代码移动到AsyncTask,它会解决你的问题。检查android.os.NetworkOnMainThreadException 【参考方案1】:android.os.NetworkOnMainThreadException 发生是因为您在主 UI 线程上进行网络调用。而是使用异步任务。
asynctask 的文档。http://developer.android.com/reference/android/os/AsyncTask.html。
在你的 UI 线程中调用 AsyncTask。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new MyDownloadTask().execute();
class MyDownloadTask extends AsyncTask<Void,Void,Void>
protected void onPreExecute()
//display progress dialog.
protected Long doInBackground(Void... params)
URL url = new URL("http://www.google.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
String responseMsg = con.getResponseMessage();
int response = con.getResponseCode();
return null;
protected void onPostExecute(VOid result)
// dismiss progress dialog and update ui
注意:AsyncTask 被设计成一个围绕 Thread 和 Handler 的辅助类,并不构成一个通用的线程框架。 AsyncTasks 最好用于短时间的操作(最多几秒钟)。如果您需要保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 API,例如Executor、ThreadPoolExecutor 和 FutureTask。
robospice 中 asynctask 的替代方案。 https://github.com/octo-online/robospice.
robospice 的一些特性。
1.异步执行(在后台 AndroidService 中)网络请求(例如:使用 Spring Android 的 REST 请求)。
2.是强类型的!您使用 POJO 提出请求,并获得 POJO 作为请求结果。
3. 对用于请求的 POJO 和您在项目中使用的 Activity 类均不实施任何限制。
4.caches 结果(在 Json 中同时包含 Jackson 和 Gson,或 Xml,或纯文本文件,或二进制文件,甚至使用 ORM Lite)。
5.当且仅当它们仍然存在时,才将网络请求的结果通知您的活动(或任何其他上下文)
6. 完全没有内存泄漏,就像 Android 加载器,不像 Android AsyncTasks 在他们的 UI 线程上通知你的活动。
7.使用简单但健壮的异常处理模型。
【讨论】:
我认为MyDownloadTask().execute();
应该是new MyDownloadTask().execute();
。 +1 描述性答案。
是的。对不起拼写错误。修好了。
我尝试编辑,但此时编辑队列已满,只需在 doInBackground
添加 try/catch 块并将 Void
设置为返回类型,并修复 @ 中的错字987654328@ 论据。
@Ibrahim.H 这太旧了,不再使用 asynctask。【参考方案2】:
NetworkOnMainThreadException:当应用程序尝试在其主线程上执行网络操作时引发的异常。
您应该在 asynctask 上调用 sendfeedback 方法,然后只有上面的代码才能工作。由于网络服务器需要大量时间来响应主线程变得无响应。为避免它,您应该在另一个线程上调用它。因此 asynctask 更好。
http://android-developers.blogspot.in/2009/05/painless-threading.html
【讨论】:
以上是关于HttpURLConnection 抛出异常 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java利用原始HttpURLConnection发送http请求数据小结
HttpUrlConnection.getInputStream 在 Android 中返回空流
AngularJs - 服务器抛出异常''XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)'
为啥 ConnectException:连接被拒绝:从 HttpURLConnection.getResponseCode() 抛出连接? [复制]
Android HttpUrlConnection getInputStream 抛出 NullPointerException