Android中EventBus事件总线发送网络请求结果更新UI
16lz
2021-01-23
Android中通常耗时操作我们都需要另起线程,比如请求服务器获取数据,而请求数据成功后却不能在子线程中更新UI,Android提供了AsyncTask,Handler等机制更新UI,又或者RXJava(开源框架)、接口回调等都可以实现子线程和UI线程通信。其实通过EventBus订阅与发布方式更新UI也很方便。
一,首先我们导入依赖
compile 'org.greenrobot:eventbus:3.0.0'
二,使用
EventBus.getDefault().register(this); //事件注册
@Subscribe(threadMode = ThreadMode.MAIN)//事件订阅public void onHanleEvent(MessageEvent messageEvent) { mTv.setText(messageEvent.getMessage());}
EventBus.getDefault().postSticky(new MessageEvent(response.body().string()));//发布消息
三,详细代码
public class HomeFragment extends BaseFragment { private TextView mTv; private Button mBt; private final static String TAG = HomeFragment.class.getSimpleName(); @Override protected int setLayoutId() { return R.layout.fragment_home; } @Override protected void findViews(View view) { mTv = view.findViewById(R.id.tv); mBt = view.findViewById(R.id.bt); } @Override protected void initViews() { EventBus.getDefault().register(this); doHttp(); } @Override protected void initEvent() { mBt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(getActivity(),SecondTest.class); getActivity().startActivity(i); } }); } @Override protected void loadDate() { } @Subscribe(threadMode = ThreadMode.MAIN) public void onHanleEvent(MessageEvent messageEvent) { mTv.setText(messageEvent.getMessage()); } private void doHttp(){ Log.i(TAG, "doHttp: "+"测试"); OkHttpClient client = new OkHttpClient(); final Request request = new Request.Builder().url("https://www.baidu.com/").build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { // Log.i(TAG, "onResponse: "+response.body().string()); EventBus.getDefault().postSticky(new MessageEvent(response.body().string())); } }); }}
效果图:
总结:使用方便,可以达到通常需求。
更多相关文章
- Android中SQLite应用详解(sql访问数据库)
- Android中的多线程之handler
- 《第一行代码--Android》读书笔记之多线程与服务
- Android异步机制一:使用Thread+Handler实现非UI线程更新UI界面
- Android主线程消息循环
- android 事件总线 -- Otto(一)
- Android.GridView事件监听
- design principle:模拟 android Button 控件点击事件
- Android基础入门教程——7.2.1 Android XML数据解析