问题:
执行Android应用程序的junti测试时,执行结果为Error,Failure Trace如下:
java.net.SocketException: Permission denied
at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocketImpl(Native Method)
at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocket(OSNetworkSystem.java:186)
at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:265)
at java.net.Socket.checkClosedAndCreate(Socket.java:873)
at java.net.Socket.connect(Socket.java:1020)
。。。。
这里假设手机或者模拟器可以正常上网,不能上网的请忽略此文。
原因分析:
1. app的manifest文件需要添加联网的权限。
大部分人出错都是这个原因。如下:
<uses-permission android:name="android.permission.INTERNET"/>
具体添加位置可参考
http://blog.csdn.net/ilysony/article/details/6267215
2. AndroidManifest.xml文件中android:targetPackage的值,即包名错误。
这个是我今天调试犯的错误,找了好久才发现原因。
创建可执行junit测试的Android应用程序时,需要在AndroidManifest.xml的指定位置添加以下信息:
<!-- 这个添加在manifest节点下 -->
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.hunter.querymobile" />
<!-- 这个添加在application节点下 -->
<uses-library android:name="android.test.runner" />
特别需要注意的是,每次添加这部分信息时一定要修改targetPackage的包名,我的代码就是忘了修改这个包名导致错误的
3. 修改后的最新代码没有正常编译。
Clean一下代码,可能是刚修改的代码没有重新编译造成的。这个是在网上看到的一个情况。
菜单栏-->Project-->Clean...