E/错误(3907): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the o

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

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

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

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



目录
相关文章
|
XML Android开发 数据格式
android程序安装后在模拟器上不显示,并且控制台显示The launch will only sync the application package on the device!
android程序安装后在模拟器上不显示,并且控制台显示The launch will only sync the application package on the device!
150 3
|
Android开发
android8.0采坑 Only fullscreen opaque activities can request orientation
android8.0采坑 Only fullscreen opaque activities can request orientation 也就是说只有全屏不透明的activity才可以设置方向,既然知道问题所在就好办了。
3013 0
|
Java Android开发
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/54860814 当应用程序启动,创建了一个叫“main”的线程,用于管理UI相关,又叫UI线程。
1158 0
|
Android开发
android 异常:ScrollView can host only one direct child
android 采用ScrollView布局时出现异常:ScrollView can host only one direct child。 主要是ScrollView内部只能有一个子元素,即不能并列两个子元素,所以需要把所有的子元素放到一个LinearLayout内部或RelativeLayout等其他布局方式。
895 0
|
编解码 Java 测试技术
【Android 应用开发】Android 开发错误集锦(二)
【Android 应用开发】Android 开发错误集锦(二)
116 0
|
网络协议 Shell API
【Android 应用开发】Android 开发错误集锦(一)
【Android 应用开发】Android 开发错误集锦(一)
152 0
|
8天前
|
存储 Android开发 开发者
探索安卓开发之旅:从新手到专家的必经之路
【9月更文挑战第3天】在这篇文章中,我们将踏上一场激动人心的旅程,深入探索安卓开发的广阔天地。无论你是初涉编程世界的新手,还是期望提升技能的开发者,这里都有你需要的知识与技巧。我们将从基础概念讲起,逐步引导你了解安卓应用的核心组件,并分享实用的开发建议。准备好了吗?让我们一起开启这段成长之旅吧!