win15677335854
win15677335854
采纳率33.3%
2015-04-19 08:50 阅读 4.2k

连接网络异常java.net.SocketTimeoutException

5

我用模拟器Android2.3.3版本跑,是可以连接网络获取到数据的,但用真机(Android4.0版本)运行就出现android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
......
网上说在onCreate()方法里面加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
但我添加之后就出现上面的问题:java.net.SocketTimeoutException: failed to connect to /172.16.58.88 (port 8080) after 5000ms

希望高手能给予指导,谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

10条回答 默认 最新

  • 已采纳
    zp_hq 轩涯凌荫 2015-04-20 14:38

    Android4.0以后就不能再主线程中进行网络请求等费时性操作,要不然就会报anr异常,这主要也是从用户体验的角度考虑问题的,想象一下,如果你手机
    网速比较慢时,这个时候请求了一个网络数据,在数据没有返回时,你的界面就不会有任何可供展示的数据,就一直卡在那里,影响用户体验。
    new Thread(){
    public void run(){
    // 做网络请求操作
    }
    }.start();
    就可以解决问题了。如果需要网络数据请求后做一些处理,就可以用到handler这个类去编写代码。

    点赞 评论 复制链接分享
  • itccccc IDTC 2015-04-19 09:19

    android2.3以上版本是不允许在主线程中做网络操作,因为你的真机是Android4.0版本,所以会报异常:android.os.NetworkOnMainThreadException,请另起线程做网络操作

    点赞 评论 复制链接分享
  • devmiao devmiao 2015-04-19 09:37

    socket 超时了,看看是不是网络不通造成的。

    点赞 评论 复制链接分享
  • u012664191 HD_Tovi 2015-04-20 00:54

    在主线程里面,不能访问网络,那些设置不建议用,还是另一起一个线程访问网络吧

    点赞 评论 复制链接分享
  • u013258303 chanchan0010 2015-04-20 06:43

    看看你有没有添加访问网络的权限

    点赞 评论 复制链接分享
  • gemumu gemumu 2015-04-20 13:43

    从字面可以知道是,在主线程中进行网络请求异常:
    从Honeycomb SDK(3.0)开始,google不再允许网络请求(HTTP、Socket)等相关操作直接在Main Thread类中,其实本来就不应该这样做,直接在UI线程进行网络操作,会阻塞UI、用户体验差
    在Honeycomb SDK(3.0)以下的版本,你还可以继续在Main Thread里这样做,在3.0以上,就不行了。网上有很多解决方法,例如thread或者asynctask都可以的

    点赞 评论 复制链接分享
  • u011528030 qqqqaaww 2015-04-21 02:34

    这个应该有配置超时的地方吧,你把超时时间配置的长一点,另外就是在你调用的地方记录日志观察你这个远程调用耗时到底是多少。

    点赞 评论 复制链接分享
  • u011325156 aloneGirle 2015-04-21 06:10

    要访问网络进行操作,还是建议不要在主线程里面写,你可以在异步任务的doInBackground里面进行网络访问操作

    点赞 评论 复制链接分享
  • u010359884 lsfire 2015-04-21 08:47

    网络请求超时,是因为在主线程里向网络发送了请求。可以考虑新开线程处理网络请求,用thread + handler模式或者异步任务模式都可以做到。

    点赞 评论 复制链接分享
  • u012664191 HD_Tovi 2015-04-22 00:36

    最简单的 new Thread,在run里面执行网络请求

    点赞 评论 复制链接分享

相关推荐