android程序连接网络错误:java.net.unknownhostexception:unable to resolve host

从网上拿了一个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.       
  5.     StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads()  
  6.             .detectDiskWrites().detectNetwork().penaltyLog().build());  
  7.     StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects()  
  8.             .detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());  
  9. }  

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

时间: 2024-08-30 17:10:16

android程序连接网络错误:java.net.unknownhostexception:unable to resolve host的相关文章

wget: unable to resolve host address问题

wget:无法解析主机地址.这就能看出是DNS解析的问题. 错误提示 wget: unable to resolve host address 解决办法: 1.登入root(VPS). 2.进入/etc/resolv.conf. 3.修改内容为下 nameserver 8.8.8.8 #google域名服务器 nameserver 8.8.4.4 #google域名服务器

cents上执行wget命令报错:unable to resolve host address

wget命令报错,无法解析域名"www.keepalived.rog" [vagrant@RS1 download]$ wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz --2014-05-05 11:06:14--  http://www.keepalived.org/software/keepalived-1.2.12.tar.gz Resolving www.keepalived.org... fai

yum 安装时错误 Errno 14 Couldn&amp;#39;t resolve host 解决办法(转)

在安装mlocate的时候发现一直报错,错误内容大致如下 Downloading Packages:http://mirrors.163.com/centos/6.5/os/i386/Packages/mlocate-0.22.2-4.el6.i686.rpm: [Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.163.com'"Trying other mirror.http://mirrors.aliyun.co

yum nginx 安装时错误 Errno 14 Couldn&amp;#39;t resolve host 解决办法

在安装mlocate的时候发现一直报错,错误内容大致如下 Downloading Packages: http://mirrors.163.com/centos/6.5/os/i386/Packages/mlocate-0.22.2-4.el6.i686.rpm: [Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.163.com'"Trying other mirror. http://mirrors.aliyun.

Android中调用startActivity结果导致:java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}

Android中调用startActivity结果导致:上网查了一下,总结如下: 第一种情况:java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPointerException 错误代码: private int defaultDrawable=R.drawable.radio; private String defaultTitle=getString(R.string.

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 4 0-连接网络异常java.net.SocketTimeoutException

问题描述 连接网络异常java.net.SocketTimeoutException 我用模拟器Android2.3.3版本跑,是可以连接网络获取到数据的,但用真机(Android4.0版本)运行就出现android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) at libcore.io.BlockGuardOs.c

java网络编程错误java.net.ConnectException: Connection refused: connect求教

问题描述 java网络编程错误java.net.ConnectException: Connection refused: connect求教 刚开始学习java网络编程,在书上看到一段代码,就动手试一下,结果出现下面错误: java.net.ConnectException: Connection refused: connect 源代码如下: import java.io.*; import java.net.*; class lx01 { public static void main(S

编译错误-java网络socket编程过程中遇到的问题

问题描述 java网络socket编程过程中遇到的问题 运行代码 import java.io.*; import java.net.*; public class InetAddressDemo { public static void main(String[] args) { Socket socket = null; InputStream is = null; OutputStream os = null; String serverIP = "127.0.0.1"; int