热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android异常java.lang.IllegalStateException解决方法

这篇文章主要介绍了Android异常java.lang.IllegalStateException解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Android异常详情介绍

这种异常我遇到以下两种情况:
1. java.lang.IllegalStateException: No wrapped connection.
2.java.lang.IllegalStateException: Adapter is detached.

原因:

1.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会出现连接超时.
2.HttpConnection没有连接池的概念,多少次请求就会建立多少个IO,在访问量巨大的情况下服务器的IO可能会耗尽。
3.通常是因为HttpClient访问单一实例的不同的线程或未关闭InputStream的httpresponse。

解决方案:获得httpclient线程安全

解决前代码:

public HttpClient httpClient = new DefaultHttpClient();
 public void postNoResult(final Context context, final String url, final Map maps, final String show) {
  new Thread() {
   @Override
   public void run() {
    try {
     HttpPost post = new HttpPost(url);
     List params = new ArrayList();
     for (String key : maps.keySet()) {
      params.add(new BasicNameValuePair(key, maps.get(key)));
     }
     post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
     HttpResponse respOnse= httpClient.execute(post);//报错位置
     if (response.getStatusLine().getStatusCode() == 200) {
      Looper.prepare();
      String r = EntityUtils.toString(response.getEntity());
      ToastUtil.print_log(r);
      if (show != null) {
       ToastUtil.show(context, show);
      }
      Looper.loop();}
    } catch (UnsupportedEncodingException e) {
     e.printStackTrace();
    } catch (ClientProtocolException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }}}.start();
 }

解决后代码:

public HttpClient httpClient = getThreadSafeClient();//获得httpclient线程安全。
public static DefaultHttpClient getThreadSafeClient() {
//获得httpclient线程安全的方法
  DefaultHttpClient client = new DefaultHttpClient();
  ClientConnectionManager mgr = client.getConnectionManager();
  HttpParams params = client.getParams();
  client = new DefaultHttpClient(new ThreadSafeClientConnManager(params,
    mgr.getSchemeRegistry()), params);
  return client;
 }

  public void postNoResult(final Context context, final String url, final Map maps, final String show) {
  new Thread() {
   @Override
   public void run() {
    try {
     HttpPost post = new HttpPost(url);
     List params = new ArrayList();
     for (String key : maps.keySet()) {
      params.add(new BasicNameValuePair(key, maps.get(key)));
     }
     post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
     HttpResponse respOnse= httpClient.execute(post);//报错位置
     if (response.getStatusLine().getStatusCode() == 200) {
      Looper.prepare();
      String r = EntityUtils.toString(response.getEntity());
      ToastUtil.print_log(r);
      if (show != null) {
       ToastUtil.show(context, show);
      }
      Looper.loop();}
    } catch (UnsupportedEncodingException e) {
     e.printStackTrace();
    } catch (ClientProtocolException e) {
     e.printStackTrace();
    } catch (IOException e) {
     e.printStackTrace();
    }}}.start();
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,现在在企业中的使用率也是很广的。git是一个分布式的版本控制系统,不像以前的svn,svn是 ... [详细]
  • 2019 年 Firebase 峰会上发布的新功能
    作者FrancisMa,HeadofProductFirebase的使命是帮助移动开发者和Web开发者迈向成功,但考虑到Firebase每个月有超过200万个活跃的应 ... [详细]
  • java中关键语言英文版_为什么Java是华尔街上最炙手可热三门编程语言之一
    原标题:为什么Java是华尔街上最炙手可热三门编程语言之一多年以来Java都是华尔街最热门的编程语言。从低延迟处理应用到订单管理系统或风险评估平台,都有 ... [详细]
  • 一个不错的JDBC连接池教程(带具体例子)
    1.前言数据库应用,在许多软件系统中经常用到,是开发中大型系统不可缺少的辅助。但如果对数据库资源没有很好地管理(如:没有及时回收数据库的游 ... [详细]
  • 80% 的 Android 应用正使用加密流量!
    本文带你了解谷歌对加密流量以及对Android应用程序执行API级别的要求,来看看这些数据未来可能的变化趋势吧。作者|PaulSawers译者|谭开朗, ... [详细]
  • 缓冲区溢出实例(一)–Windows
    一、基本概念缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获 ... [详细]
  • socket8 [命名管道]
    ::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一 ... [详细]
  • docker整体了解
    Docker是一个基于LXC技术构建的容器引擎,基于Go语言开发,遵循Apache2.0协议开源Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移 ... [详细]
  • C#使用System.Net.Mail类实现邮件发送【.Net开发】
    这篇文章介绍了C#使用System.Net.Mail类实现邮件发送的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值, ... [详细]
  • 1、对于List而言,要不然就使用迭代器,要不然就从后往前删除,从前往后删除会出现角标越界。因为我List有两个remove方法,一个是int作为形参(删除指定位置的元素),一个是 ... [详细]
  • 服务器系统控制台怎么打开文件,云服务器控制台怎么打开文件
    云服务器控制台怎么打开文件内容精选换一换远程桌面协议(RemoteDesktopProtocol,RDP),是微软提供的多通道的远程登录协议。本节为您介 ... [详细]
  • 本人先前是linux的支持都,使用过后就成为了其的鄙视者,观点如下:linux想跟windows比,tmd先搞好软件安装的问题。在linux在动不动就要命令行,有多少人会这恶心的命令行。会命令 ... [详细]
  • 猪猪猫.CNWINXPSP2电脑城装机12DVD[豪华版]
    直接下载地址http:bt.jujumao.cn点击下载种子下载信息[点击浏览该文件:2007-12-19猪猪猫.cn-winxpsp2电脑城装机12豪华版.torrent]| ... [详细]
  • 首先,我们介绍下“面部埋线提升”的抗衰原理pdo设置。 ... [详细]
  • 媒介这里大部份是本身碰到过的状况,另有一部份自创了偕行的文章,假如人人有碰到别的坑,迎接提出来一同研讨。学问要点1.Meta标签1.制止用户缩放页面,页面强迫让文档的宽度与装备的宽 ... [详细]
author-avatar
mobiledu2502880747
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有