最近在做一个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(安卓)DVM
  3. 有关Android线程的学习
  4. Android深入浅出之Binder机制
  5. android UI线程向子线程发送Message
  6. Android中对Handle机制的理解
  7. Android(安卓)Handler详解
  8. Android(安卓)异步加载解决方案(循环,多任务)
  9. Android中使用SQlite进行数据操作

随机推荐

  1. 对Android应用进行单元测试
  2. Android的动画配置xml文件
  3. android获取系统环境变量
  4. android打开前置摄像头和后置摄像头
  5. 屏幕方向android:screenOrientation
  6. android 传感器
  7. Android官方架构组件:Lifecycle
  8. Android兼容性优化-Android 8.0设置Activ
  9. Image
  10. 局域网调试Android