嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2015-03-06 3109 次浏览 标签 : Android

先写两个错误:

1.android.os.NetworkOnMainThreadException

2.android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

第一个是因为网络请求放在了主线程中进行;第二个是因为子线程中又对主线程做的 UI 进行操作。

最后参考这个http://www.tuicool.com/articles/MvmeYr,测试通过。

正确的方式:

1.网络请求必须要放到子线程去做

2.通过 handler 来将子线程获取的数据传递到主线程中取。

new Thread(runnable).start();
Handler handler = new Handler(){
	public void handleMessage(Message msg){
		super.handleMessage(msg);
		Bundle data = msg.getData();
		String val = data.getString("value");
		//下面是主线程中的 UI 操作举例
		tabContent = (TextView) findViewById(R.id.tabContent);
		tabContent.setText(val);
	}
}
Runnable runnable = new Runnable(){
	public void run(){
		String apiUrl = "http://xxx";
		String res = HttpGet(apiUrl);
		Message msg = new Message();
		Bundle data = new Bundle();
		data.putString("value",res);
		msg.setData(data);
		handler.sendMessage(msg);
	}
}

public HttpGet(String url){
	//封装下 httpGet
}

Android 网络请求在 UI 中的实际运用

效果如图,马上就要成功啦,happy:

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表