首页 > 学院 > 开发设计 > 正文

Eventbus的使用(一)

2019-11-06 09:53:17
字体:
来源:转载
供稿:网友

Eventbus的使用(一)

学习android的过程中,感觉最令我头疼的莫过于通信了,无论是android中线程之间的通信、进程之间的通信,还是java与c++的通信,有时候真的很抓狂。远远难于实现android中的某个功能。 Eventbus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅,以及将发送者和接收者解耦。之前一直在使用Handler进行通信,发现Eventbus突出的特点就是解耦性。下面介绍来一个线程之间的通信,原理都一样,很好学。 下载eventbus.jar:http://pan.baidu.com/s/1nvuLv9v

直接上传代码

主要分为五个步骤

@requires_authorization**MainFragment.java**package com.example.xhm.myapplication.activity.activity.fragment;import android.os.Bundle;import android.support.v4.widget.SwipeRefreshLayout;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;import com.alibaba.fastjson.JSON;import com.example.xhm.myapplication.R;import com.example.xhm.myapplication.activity.activity.adapter.MainAdapter;import com.example.xhm.myapplication.activity.activity.bean.Beauty;import com.example.xhm.myapplication.activity.activity.bean.MainData;import com.example.xhm.myapplication.activity.activity.bean.MainDataItem;import com.example.xhm.myapplication.activity.activity.bean.User;import com.example.xhm.myapplication.activity.activity.util.Constant;import com.example.xhm.myapplication.activity.activity.util.FirstEvent;import com.example.xhm.myapplication.activity.activity.util.HttpUtil;import com.example.xhm.myapplication.activity.activity.util.RefreshLayout;import java.util.ArrayList;import java.util.List;import de.greenrobot.event.EventBus;public class MainFragment extends BaseFragment { PRivate View view; private ListView lvMain; private MainAdapter mainAdapter; private static final String TAG="MainFragment"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view=inflater.inflate(R.layout.fragment_main, container, false); return view; } @Override public void initViews() { lvMain= (ListView) view.findViewById(R.id.lv_main); } @Override public void initData() { //第一步:注册EventBus EventBus.getDefault().register(this); HttpUtil httpUtil=new HttpUtil(getContext()); String json= httpUtil.getString(Constant.MAIN_URL); } @Override public void setListeners() { } //第四步 // 将线程中的信息传递到主线程中,参数为线程中引用的事件。 public void onEventMainThread(FirstEvent event){ String msg=event.getmMsg(); MainData mainData= JSON.parSEObject(msg, MainData.class); Log.e(TAG,"mainData="+mainData.toString()); List<Beauty> beautyList=new ArrayList<>(); List<MainDataItem> trips=mainData.getTrips(); for(int i=0;i<trips.size();i++){ MainDataItem mainDataItem=trips.get(i); User user= mainDataItem.getUser(); Beauty beauty=new Beauty(); beauty.setPopular_place_str(beauty.getPopular_place_str()); beauty.setAvatar_s(user.getAvatar_m()); beauty.setCover_image_default(mainDataItem.getCover_image_default()); beauty.setDay_count(mainDataItem.getDay_count()); beauty.setLast_day(mainDataItem.getLast_day()); beauty.setName(mainDataItem.getName()); beauty.setUserName(user.getName()); beauty.setView_count(mainDataItem.getView_count()); beautyList.add(beauty); } Log.e(TAG,"trips.size="+trips.size()); mainAdapter=new MainAdapter(getContext(),beautyList); lvMain.setAdapter(mainAdapter); } //第五步 //记得注销EventBus,在Activity退出时要注销,否则会出现异常。 @Override public void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }}**FirstEvent.java**package com.example.xhm.myapplication.activity.activity.util;/** * Created by xhm on 2017/2/23. *///第二步:创建一个事件,类似set和get的效果。public class FirstEvent { private String mMsg; public FirstEvent(String msg){ mMsg=msg; } public String getmMsg(){ return mMsg; }}**HttpUtil.java**package com.example.xhm.myapplication.activity.activity.util;import android.content.Context;import android.util.Log;import com.android.volley.RequestQueue;import com.android.volley.Response;import com.android.volley.VolleyError;import com.android.volley.toolbox.JsonObjectRequest;import com.android.volley.toolbox.Volley;import org.json.JSONObject;import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.ProtocolException;import java.net.URL;import de.greenrobot.event.EventBus;/** * Created by xhm on 2017/2/23. */public class HttpUtil { private Context context; public HttpUtil(Context context){ this.context=context; } public String getMainJson(final String path) { new Thread(new Runnable() { @Override public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setUseCaches(false); conn.setDoOutput(false); conn.setDoInput(true); int responseCode = conn.getResponseCode(); if (responseCode == 200) { InputStream is = conn.getInputStream(); String json = inputStream2String(is); //第三步:引用创建的事件进行添加信息 EventBus.getDefault().post(new FirstEvent(json)); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); return ""; } private String inputStream2String(InputStream is) throws IOException { String json; BufferedInputStream bis = new BufferedInputStream(is); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[64]; int leng = -1; while ((leng = bis.read(buffer)) != -1) { baos.write(buffer, 0, leng); } bis.close(); is.close(); baos.flush(); json = new String(baos.toByteArray()); baos.close(); return json; } public String getString(String url) { RequestQueue mQueue = Volley.newRequestQueue(context); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { String json= response.toString(); EventBus.getDefault().post(new FirstEvent(json)); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", "xxxxxhhhmm err"+error.getMessage(), error); } }); mQueue.add(jsonObjectRequest); return ""; }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表