java如何修复Android中的NetworkonMainThreadException?
我正在为任务创建一个项目,我是Android新手,我想从非常常见的urlhttp://api.安卓hive.info/contacts/
访问json
问题:我正在尝试读取url并获取和解析此url返回的json
我已经在我的AndroidManifest中添加了以下行。xml
<uses-permission 安卓:name="安卓.permission.INTERNET"/>
首选项:和我的安卓首选项是
<uses-sdk
安卓:minSdkVersion="8"
安卓:targetSdkVersion="18" />
- 空气污染指数第18级
- 安卓4.3
这就是我试图读取url的方式
static InputStream is = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
错误消息
11-02 05:23:47.843: E/AndroidRuntime(2207): FATAL EXCEPTION: main
11-02 05:23:47.843: E/AndroidRuntime(2207): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.me.countrypedia/com.me.countrypedia.MainActivity}: 安卓.os.NetworkOnMainThreadException
11-02 05:23:47.843: E/AndroidRuntime(2207): at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-02 05:23:47.843: E/AndroidRuntime(2207): at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-02 05:23:47.843: E/AndroidRuntime(2207): at 安卓.app.ActivityThread.access$600(ActivityThread.java:141)
11-02 05:23:47.843: E/AndroidRuntime(2207): at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
此外,我还将按照本教程介绍ListView示例 http://www.安卓hive.info/2011/11/安卓-xml-parsing-tutorial/
# 1 楼答案
你的
Exception
实际上告诉你你做错了什么。您没有使用另一个线程执行网络操作。相反,您在UI线程上执行网络操作,这在Android上无法(不)工作连接到url的代码应该在一个异步任务
doInBackground()
方法中执行,例如在UI线程下执行强>看看这个关于如何使用AsyncTask的问题:How to use AsyncTask
# 2 楼答案
更新答案:
潜在的长时间运行操作,如网络操作,应在工作线程中完成
为更长的操作创建工作线程的最有效方法是使用AsyncTask类。只需扩展AsyncTask并实现doInBackground()方法即可执行工作
许多库可用于执行网络操作,如Volley、retrofit等
旧答案:
在activity
onCreate
方法中添加以下行# 3 楼答案
使用以下代码
在您的活动中,请使用以下代码