Android学习日志: 执行.getResponseCode()方法时出现错误常

源代码:

try {
    URL url = new URL(path);
    //得到与服务器的连接对象
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    //设置请求方式为Http请求的GET
    conn.setRequestMethod("GET");
    //指定连接超时时间
    conn.setConnectTimeout(5000);
    //得到服务器端返回的状态码
    int code = conn.getResponseCode();
    if (code == 200) { //请求成功
     InputStream is = conn.getInputStream();
     Bitmap bitmap = BitmapFactory.decodeStream(is);
     iv_result.setImageBitmap(bitmap);
    }else {
     Toast.makeText(this, "服务器返回状态码错误", 0).show();
    }
   } catch (MalformedURLException e) {
    e.printStackTrace();
    Toast.makeText(this, "图片路径错误", 0).show();
   } catch (IOException e) {
    Toast.makeText(this, "访问网络错误", 0).show();
    e.printStackTrace();
   }

执行时出现错误:

 java.lang.IllegalStateException: Could not execute method of the activity

解决方法:

http://bbs.csdn.net/topics/390420266处找到解决方法,

       在MainActivity中调用这个类的网络操作方法,可能会导致activity的一些问题,谷歌从在android2.3版本以后,系统增加了一个类:StrictMode。这个类对网络的访问方式进行了一定的改变。
       StrictMode通常用于捕获磁盘访问或者网络访问中与主进程之间交互产生的问题,因为在主进程中,UI操作和一些动作的执行是最经常用到的,它们之间会产生一定的冲突问题。将磁盘访问和网络访问从主线程中剥离可以使磁盘或者网络的访问更加流畅,提升响应度和用户体验。
如果一定要这样操作的话,需要在MainActivity,onCreate中加入如下代码:
StrictMode.setThreadPolicy(new
StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
        StrictMode.setVmPolicy(
new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());


问题最终解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值