Android——使用Handle和Message更新UI控件

在Android应用中,为了在后台执行网络通信并更新UI,本文介绍了如何使用Handler和Message。当网络请求在HttpUtils静态方法中执行时,遇到如何将结果返回主线程的问题。解决方案是通过创建一个Handler实例,在主线程中重写handleMessage()方法,网络请求完成后通过发送Message传递数据,然后在handleMessage()中更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在写一个使用Android端访问PCweb服务端的测试应用,需要在进行网络通信,而android网络通信需要异步执行,一开始是直接用AsyncTask的方法在MainActivity中写代码,一切正常,通过AsyncTask 的onPostExecute方法进行界面更新,但为了代码的可复用,采用将网络通信放到另外一个HttpUtils.java类中作为静态方法调用。此时出了一些问题:
1.不知道怎么将web端的输出结果返回给主线程的变量
2.在HttpUtils.java中声明静态字段,将结果先递给静态字段。但是在主线程中去这个字段时往往不是及时的。

所以在百度了一下之后,找到一种很普遍的方法:用handle 来处理异步线程的执行情况
具体流程:
1.在主线程中声明一个Handle(android.os),他有可以覆盖的一个方法handleMessage(Message msg)用于监听收到消息的事件,在这个方法里面可以进行UI的一些控件更新。
2.在异步方法执行的过程中,如果想要返回一些参数给主线程,那么通过发送一个Message的方式,传回参数,可以包含当前消息包含的类型,例如代表当前的消息是查询操作发出的。
3.在主线程中的Handle的handleMessage()中判断异步方法中是什么方法发出的消息。然后进行相关的操作

下面开始一个简单的例子
例如:我要进行一次http网络请求,请求结果放在StringBuilder中,要先新建一个线程去运行网络请求,在得到请求返回的数据后,将他包装到message中,再利用handle的send方法返回到UI线程中执行

在包类的其他java文件中写一个方法,这里我新建了一个HttpUtils.java类,里面的一些queryURL是自己本地搭的Apache服务器的PHP访问地址,用于对MySQL数据库进行相关操作.

package com.sky.firsthttpapp;

import android.os.Bundle;
import android.os.Message;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值