EventBus的简单使用(一)

          目前android消息传递的方法有很多,例如activity跳转的时候把数据封装在intent中传递startActivity,方法回调,handler,广播,startActivityforResult,方法真的是数不胜数。但是今天,我想要介绍的是,EventBus。

          EventBus是第三方的消息传递框架,用了第一次,我还想用第二次。相比AsyncTask和handler,他更为简单,轻捷,小巧,美观。你用handler发送消息,首先你要定义一个handle吧,handler写起来,很丑,而且还要考虑static的handler的移除问题,你需要发消息的时候还要获取一个消息实例,把数据封装在message中然后传递过去,传递到handler中还要判断这是哪一条messgae,很麻烦。AsyncTask就是封装了线程池,写起来也不错,但是,EventBus,真的很好很好用啊,特别是你需要解析服务器返回的JSON数据的时候,这个时候你就发现,哇,EventBus真的很好用。怎么用?

第一步,添加依赖。

compile 'org.greenrobot:eventbus:3.0.0'

第二步 ,同步工程。

第三步,定义一个Message,这个Message就是一个javaBean。

public class StarBean {
    public String QFriend;
    public String all;
    public String color;
    public String datetime;
    public String health;
    public String love;
    public String money;
    public String number;
    public String summary;
}

第四步,注册EventBus

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inner_layout_star);
        EventBus.getDefault().register(this);
    }

第五步,在activity或者fragment销毁的时候,注销EventBus

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }


第六步,发送一个eventbus消息

EventBus.getDefault().post(starBean);

    private void getDataFromServer(String xing){
        OkHttpClient okHttpClient=new OkHttpClient();
        Request request=new Request.Builder().url("http://web.juhe.cn:8080/constellation/getAll?" +
                "consName="+xing+"&type=today&key=5498f3d5e6c291111b9fea80e8ae60").build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                call.cancel();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String responseData=response.body().string();
                Gson gson=new Gson();
                StarBean starBean=gson.fromJson(responseData,StarBean.class);
                EventBus.getDefault().post(starBean);
                call.cancel();
            }
        });
    }

第七步,处理消息,模式选择,在主线程中运行。@Subscribe(threadMode = ThreadMode.MAIN)

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void handleStar(StarBean starBean){
        tvTime.setText(starBean.datetime);
        tvAll.setText(starBean.all);
        tvColor.setText(starBean.color);
        tvHealth.setText(starBean.health);
        tvLove.setText(starBean.love);
        tvMoney.setText(starBean.money);
        tvNumber.setText(starBean.number);
        tvQfriend.setText(starBean.QFriend);
        tvSummary.setText(starBean.summary);
    }


最后要注意的是,第七步中的方法,一定是public的。

EventBus简单使用七步诗,一气呵成

你可能感兴趣的:(android开发中级)