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!
142 3
|
Android开发
android8.0采坑 Only fullscreen opaque activities can request orientation
android8.0采坑 Only fullscreen opaque activities can request orientation 也就是说只有全屏不透明的activity才可以设置方向,既然知道问题所在就好办了。
3012 0
|
Java Android开发
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/54860814 当应用程序启动,创建了一个叫“main”的线程,用于管理UI相关,又叫UI线程。
1153 0
|
Android开发
android 异常:ScrollView can host only one direct child
android 采用ScrollView布局时出现异常:ScrollView can host only one direct child。 主要是ScrollView内部只能有一个子元素,即不能并列两个子元素,所以需要把所有的子元素放到一个LinearLayout内部或RelativeLayout等其他布局方式。
890 0
|
2天前
|
JavaScript 前端开发 Java
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
14 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
|
6天前
|
Java Android开发 iOS开发
探索安卓与iOS开发的差异:平台选择对项目成功的影响
在移动应用开发的世界中,选择正确的平台是关键。本文通过比较安卓和iOS开发的核心差异,揭示平台选择如何影响应用的性能、用户体验和市场覆盖。我们将深入探讨各自的开发环境、编程语言、用户界面设计原则以及发布流程,以帮助开发者和企业做出明智的决策。
27 9
|
1天前
|
搜索推荐 Android开发 iOS开发
探索安卓与iOS开发的差异性与互补性
【8月更文挑战第19天】在移动应用开发的广阔天地中,安卓与iOS两大平台各据一方,引领着行业的潮流。本文将深入探讨这两个平台在开发过程中的不同之处以及它们之间的互补关系,旨在为开发者提供一个全面的视角,帮助他们更好地把握市场动态,优化开发策略。通过分析各自的开发环境、编程语言、用户界面设计、性能考量及市场分布等方面,我们将揭示安卓与iOS开发的独特魅力和挑战,同时指出如何在这两者之间找到平衡点,实现跨平台的成功。