最近在做一个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<String, Void, String>{@Overrideprotected void onPostExecute(String result) {     //对UI组件的更新操作}@Overrideprotected String doInBackground(String... params) {//耗时的操作return params[0];}    }}

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

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



更多相关文章

  1. android的Handler
  2. Android的Message机制(简单小结)
  3. Android,UI主线程与子线程
  4. Android(安卓)SQLite简单操作示例
  5. 判断Android的网络状态
  6. android socket通信
  7. Android(安卓)ThreadPoolUtils-线程池相关
  8. 使用Android新式LruCache缓存图片,基于线程池异步加载图片
  9. android Handler and progress

随机推荐

  1. Android管理篇
  2. Android属性动画—实现第三方登录的上拉
  3. Android(安卓)Https请求详细demo
  4. android EnMicroMsg.db安卓微信数据库获
  5. 再识android (一)
  6. 《Android程序设计》一3.9 把软件移植到A
  7. AIDL基础介绍
  8. 国内移动应用市场盘点(Android平台)
  9. Google公开指责微软、苹果和甲骨文试图通
  10. Android视频播放器屏幕左侧边随手指上下