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

所属分类: 软件编程 / Android 阅读数: 51
收藏 0 赞 0 分享

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<String, String> maps, final String show) {
  new Thread() {
   @Override
   public void run() {
    try {
     HttpPost post = new HttpPost(url);
     List<NameValuePair> params = new ArrayList<NameValuePair>();
     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<String, String> maps, final String show) {
  new Thread() {
   @Override
   public void run() {
    try {
     HttpPost post = new HttpPost(url);
     List<NameValuePair> params = new ArrayList<NameValuePair>();
     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();
 }

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

更多精彩内容其他人还在看

android byte[] 和short[]转换的方法代码

这篇文章主要介绍了android byte[] 和short[]转换的方法代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取应用程序大小的方法

这篇文章主要介绍了Android获取应用程序大小的方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取其他包的Context实例代码

这篇文章主要介绍了Android获取其他包的Context实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android放大镜的实现代码

这篇文章主要介绍了Android放大镜的实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android 读取Properties配置文件的小例子

这篇文章主要介绍了Android 读取Properties配置文件的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android通讯录开发之删除功能的实现方法

这篇文章主要介绍了Android通讯录开发之删除功能的实现方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享
查看更多