最近在做一个Android客户端,和Struts2搭建的服务器之间的通信,采用HTTP通信,以前做的都是简单的Android客户端,没有什么特别耗时的操作,所以这次就在Android中的耗时程序头疼,于是通过查看资料就开通了子线程,但是在子线程中却抛出异常:android.view.ViewRootImpl$CalledFromWrongThreadException

       一般在Android程序中,为了控制UI线程,都会控制主线程的时间,一般是5秒,因为我开通了子线程,而且这个线程需要通过HTTP协议获取服务器上的数据,所以,比较耗时。而且,在子线程中需要对UI组件的更新操作,所以,线程超时,导致android.view.ViewRootImpl$CalledFromWrongThreadException的异常。

       官方推荐解决方案:引入AsyncTask类,重写doInBackground方法和onPostExecute方法。

package com.example.service_android;import java.net.URI;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import org.json.JSONObject;import android.os.AsyncTask;import android.os.Bundle;import android.util.Log;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        new Thread(){        public void run(){        new AnotherTask().execute("JSON");        }        }.start();    }    private class AnotherTask extends AsyncTask{@Overrideprotected void onPostExecute(String result) {     //对UI组件的更新操作}@Overrideprotected String doInBackground(String... params) {//耗时的操作return params[0];}    }}

在doInBackground(Params...)方法中写耗时的操作。在onPostExecute(Result),中写对UI的操作。

解决这个问题的方法好像很多,但是,感觉这个还不错。



更多相关文章

  1. [置顶] Android 操作SQLite数据库(初步)-在程序中删除数据库
  2. android UI线程向子线程发送Message
  3. [置顶] Android中数据存储的5种方法
  4. Android中使用SQlite进行数据操作
  5. 基于RTP和Android的视频传输的研究实现方法
  6. Android的子线程能更新UI吗?
  7. Android 中.aar文件生成方法与用法
  8. Android Studio中获取sha1证书的方法

随机推荐

  1. 由12306.cn谈谈网站性能技术
  2. 武汉有哪些牛批的互联网公司?
  3. 南京有哪些牛批的互联网公司?
  4. TCP 的那些事儿
  5. W3C规范制定流程
  6. 第1年
  7. 彻底理解ReentrantLock可重入锁的使用
  8. 一个工作三年的同事,居然还搞不清深拷贝、
  9. 一半是天使一半是魔鬼的Unsafe类详解
  10. 当CSS遇上表单控件