android程序连接网络错误 java net unknownhostexception unable to reso

从网上拿了一个android的天气预报程序来学习,最后run的时候发现提示下面的错误:

按我的调试过程分2步,都是有关网络访问方面的问题。

第一个错误:

android.os.NetworkOnMainThreadException

at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
......

原因:是涉及到url操作的时候,访问网络不能在主程序中运行

解决:参考【http://geeksun.iteye.com/blog/1447708http://kb.cnblogs.com/a/2311659/

在Activity类的onCreate方法中添加下面的代码,线程的方法还没测试。

[html] view
plain
copy

  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.main);
  4. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads()
  5. .detectDiskWrites().detectNetwork().penaltyLog().build());
  6. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects()
  7. .detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
  8. }

Android的官方文档给出了这个类设置的目的:
StrictMode是一个系统提供的开发工具,用以检测在开发过程中因为偶然的事故从而造成的系统潜在的问题,进而提示开发者对其进行修复。

StrictMode通常用于捕获磁盘访问或者网络访问中与主进程之间交互产生的问题,因为在主进程中,UI操作和一些动作的执行是最经常用到的,它们之间会产生一定的冲突问题。将磁盘访问和网络访问从主线程中剥离可以使磁盘或者网络的访问更加流畅,提升响应度和用户体验。

显然,大多数初学者在进行网络开发时,会选择将访问网络的代码直接放到主进程中,由于和主进程的首要工作——UI交互——相矛盾,因此,必须设置一定的检测机制,以保证系统运行的流畅,所有的异常都可以被检测。

public static voidsetThreadPolicy(StrictMode.ThreadPolicy policy)
这个方法允许我们为当前应用设置一组线程运行策略机制。其中的参数是一个策略组(即一组策略)。
public static finalclass StrictMode.ThreadPolicy.Builder()
Builder是StrictMode中内嵌类ThreadPolicy的一个内嵌类,在此我们调用了它的默认构造方法。
detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()

通过这种方式,我们设置了一组监控模式,我们要检测磁盘的读写,网络的访问, Log中的违规等。

第二条语句设置了虚拟机的一组监控策略,参数一致,因此不再赘述。
这样,在保证了网络和磁盘访问受控之后,主线程就允许我们对网络资源进行访问。

【参考http://www.2cto.com/kf/201205/129843.html

第二个错误:

java.lang.nullpointerexception

第一种情况:android4.0中

java.net.unknownhostexception:unable to resolve host "www.google.com":no addree associated with hostname

debug跟踪是在执行url操作url.openStream()时抛出IOException异常。

第二种情况:android2.2中

java.net.SocketException: Permission denied

........

debug跟踪是在执行url操作url.getInputStream()时抛出IOException异常。

从网上搜索了一下,发现有两个方法:

1、添加dns,参考【http://interzb.iteye.com/blog/1240835】,经测试无效,不是这个原因;

Run Configurations...或者Debug Configurations...打开下面的窗口,在对应项目的Target栏目最后行设置dns

2、Manifest文件没有标明网络访问权限,测试正常,解决问题。

如果确认网络已经正常连接,还出现这个问题,那么看一下Manifest文件是否标明了应用的网络访问权限;如果没有标明,就访问不了网络,就会有这个错误。

在AndroidManifest.xml文件中添加下面的语句:

//<uses-sdk android:minSdkVersion="15" />//在这行后面

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

参考【http://blog.csdn.net/murongshusheng/article/details/7623188

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/skiwnchhw/p/10472707.html

时间: 2024-10-07 20:32:33

android程序连接网络错误 java net unknownhostexception unable to reso的相关文章

解决android上java.net.UnknownHostException: Unable to resolve host &quot;xxxx&quot;: No address associated wit

如题:解决android上面java.net.UnknownHostException: Unable to resolve host "m.blog.csdn.net": No address associated with hostname的错误: 这是由于我们在开发的过程中没有给模拟器和Manifest开放网络导致的, 解决方法目前有两种: 1.android设备网络连接没打开,例如3G网络和WIFI网络 2.Manifest文件没有标明网络访问权限 <uses-permi

android程序连接网络出现android.os.NetworkOnMainThreadEx

android程序连接网络出现android.os.NetworkOnMainThreadEx 错误: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) ...... 原因:是涉及到url操作的时候,访问网络不能在主程序中运行 解决:参考[http://geeksun.iteye.com/blog/1447

[转]android访问网络:java.net.ConnectException: localhost/127.0.0.1:8888 - Connection refused

这对刚学会向tomcat模拟的本地服务器发送请求的同学非常重要! 转自:http://wing123.iteye.com/blog/1873763 描述:在做注册功能的时候,向本地服务器:127.0.0.1发送注册请求,logcat显示出错信息: java.net.ConnectException: localhost/127.0.0.1:8888 - Connection refused 解决办法:弃用127.0.0.1来访问服务器,改用本机的真实IP. 问题解释:摘自:http://80x8

Android Gradle 编译错误Java finished with non-zero exit value 2

出现这个错误主要有两类错误 依赖包重复 方法数超过65K 针对第一种错误,可能是由于build.gradle里写了 compile fileTree(dir: 'libs', include: ['*.jar']) 这种方式,同时又加了单独的依赖针对第二种错误原因,使用multidex打包可以解决问题,在build.gradle里添加 defaultConfig { multiDexEnabled true } 即可.解决方法整理自:http://stackoverflow.com/questi

[hadoop] hdfs 格式化错误 java.net.UnknownHostException

执行 hdfs namenode -format 抛出错误 主机名称异常,查看主机信息 原来 通过 bogon 无法找到主机 ,在host 中也没有对应的映射信息 修改后即可 再次执行 hdfs namenode -format 正常启动. 参考: 深入理解Linux修改hostname

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPointerException 错误的集中原因及解决办法

上面那个问题刚解决,就又来一个问题~~~~ 错误信息字符串:java.lang.RuntimeException: Unable to start activity ComponentInfo{...}: java.lang.NullPointerException 网上有不少解决办法 一般都会在Activity  onCreate()方法里的setContentView(XXX)发生此错误,网上查阅了很多原因,大概有四种重要可能的原因: 原因一:xxx的错误,若为R.layout.main 

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi 错误信息字符串:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.first/com.first.Game}: java.lang.NullPointerException 一般都会在Activity  o

Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi

错误信息字符串:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.first/com.first.Game}: java.lang.NullPointerException 一般都会在Activity  onCreate()方法里的setContentView(XXX)发生此错误,网上查阅了很多原因,大概有四种重要可能的原因: 原因一:xxx的错误,若为R.layout.main  那么应该是main.x

Android 开发之错误整理java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10088 nor current process has android.permission.READ_PHONE_STATE.

java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10088 nor current process has android.permission.READ_PHONE_STATE. 今天写了一款发短信的软件,拿了个酷派5879,试了下,结果不能用,把try{}catch{}去掉了,报这个错误, android.permission.READ_PHONE_STATE.没有READ_PHONE_STATE权限,