关于Android客户端异步执行的Handler实例(有源码,调试成功)

来源:互联网 发布:网络模特工资怎么算 编辑:程序博客网 时间:2024/06/05 21:01
    这个部分的需求是这样的:在访问网络时,获取服务器返回来的JSON数据,并将数据存储到List中,在访问网络之后,在另外一个方法使用这个List。刚开始不是使用异步执行的,导致的结果是:访问网络时,List大小为2,再另外一个方法中List大小变为0, 也就是说访问网络之后,List没有传过来,因此List大小变为0。真正的原因是访问网络时,需一定的时间,List还没有传过来,就开始执行第二个方法了,所以List在后面的大小为0。要解决这个问题,我们采用异步执行。
    异步执行主要有两种方法:1)Handler;2)Asynctask。
    我这里主要使用第一种方法。不多说了,直接上Demo吧。
    首先是自定义MyHandler,这个MyHandler继承Handler。
package com.fwzkj.tplp2015062501.web;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import com.fwzkj.tplp2015062501.domain.LockPark;import android.os.Handler;import android.os.Looper;import android.os.Message;public class MyHandler extends Handler {//空的构造函数public MyHandler() {super();}private ArrayList<User> userList;public ArrayList<User> getuserList() {return userList;}public void setuserList(ArrayList<User> userList) {this.userList = userList;}   }
    在访问网络时,获得对象,将对象存储到List中,然后就发送给handler。  
//用Handler传递List Message msg = new Message();msg.obj = userList;msg.what = 1;handler.sendMessage(msg);System.out.println("已经传递了");
    接着就是在主线程中接受该数据。
Handler handler = new MyHandler(){public void handleMessage(Message msg) { super.handleMessage(msg);  if( msg.what == 1 ){  List<User> userlistout = (List<User>)msg.obj; System.out.println("传递过来之后LockList大小:"+userlistout.size());if( userlistout.size() > 0 ){  System.out.println("已经进来了!");
                  SecondMethod();//这是第二个方法。在这个方法中就可以使用List了。}}}
运行结果:
结果说明:传递之后大小变为了2,说明传递成功。
注意:大家在实际开发中,将user改成自己对应的实体,就可以使用了。
                                             
0 0
原创粉丝点击