Giter VIP home page Giter VIP logo

eventbustest's Introduction

基于EventBus和OkHttp搭建的网络框架

简介

本编文章是基于EventBus3.0和OkHttp搭建的网络框架。一方面利用了EventBus的事件订阅机制,另一方面使用了方便快捷的OkHttp网络请求库,将两者结合起来,更方便快捷,方便日后的开发工作。另外也封装了,网络加载进度对话框,fastjson工具类,网络请求等工具类,方便后来使用。

项目结构(本架构的项目结构图)

目录结构

项目准备

引入以下几个库 compile'com.squareup.okhttp:okhttp:2.7.5' compile'com.squareup.okio:okio:1.13.0' compile'com.alibaba:fastjson:1.2.32' compile'org.greenrobot:eventbus:3.0.0' compile'com.jakewharton:butterknife:7.0.1' 我这里暂时使用的是K780数据里面的天气接口进行测试的,暂时没对返回的数据进行页面展示的二次加工。只是搭建这个网络框架环境而已

项目介绍

1 BaseActivity(初始化,抽象方法,eventbus的接收)

/**
* Created by Chad on 2017/5/24.
* Version 1.0
*/
public abstract class BaseActivity extends AppCompatActivity {
protected RequestTemplate mRequest;
@Override
protected voidonCreate(@NullableBundle savedInstanceState) {
super.onCreate(savedInstanceState);
beforeSetContentView();
setContentView(getContentViewId());
ButterKnife.bind(this);
EventBusUtils.register(this);
mRequest=new RequestTemplate(this);
initProgressBar();
initData();
}
protected abstract voidinitData();
protected abstract intgetContentViewId();
/**
*? 主线程运行
*@paramobject
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public voidOnEvent(EventMessage object) {
onNormEvent((EventMessage) object);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public voidOnEvent(ServiceMessage object) {
onServiceEvent((ServiceMessage) object);
}
/**
* 子线程运行
*@paramobject
*/
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public voidOnBackGround(BackGroundMessage object) {
onThreadEvent((BackGroundMessage) object);
}
protected abstract voidonThreadEvent(BackGroundMessage object);
protected abstract voidonServiceEvent(ServiceMessage object);
protected abstract voidonNormEvent(EventMessage object);
protected voidbeforeSetContentView() {
}
@Override
protected voidonDestroy() {
super.onDestroy();
EventBusUtils.unregister(this);
}
/*==============进度条==============*/
privateProgressHUDmProgressHUD;
private voidinitProgressBar() {
if(mProgressHUD==null) {
mProgressHUD= ProgressHUD.newInstance(this,"正在加载中...",false,null);
}
mProgressHUD.setMessage("正在加载中...");
}
public voidshowProgressBar() {
if(mProgressHUD!=null&&mProgressHUD.isShowing())
return;
//? ? ? ? initProgressBar();
mProgressHUD.show();
}
public voidshowProgressBar(String message) {
if(mProgressHUD!=null&&mProgressHUD.isShowing())
return;
//? ? ? ? initProgressBar();
mProgressHUD.setMessage(message);
mProgressHUD.show();
}
public voidstopProgressBar() {
if(mProgressHUD!=null&&mProgressHUD.isShowing()) {
mProgressHUD.dismiss();
}
}
}

这里提到一点eventbus的使用,这里用的是3.0,发起方调用post函数,接收发接受,具体接收的方法是根据括号内类名的类别来判断的,上面写的那个Main或者Background只是代表它是在哪个线程运行。如果是子线程运行,需要post发起的时候也是在子线程中。这列附上github上eventbus的地址,不懂怎么使用的可以去看下。EventBus

2 SucApplication(刚开始启动就初始化一些操作,获取context)

public classSucApplicationextendsApplication {
private staticSucApplicationmApplication;
@Override
public voidonCreate() {
super.onCreate();
mApplication=this;
}
public staticSucApplication getApplication() {
returnmApplication;
}
}

3 utils(工具类的集合)

3.1 EventBusUtils,获取实例。。。

3.2 FastJsonUtils 将json进一步转化

3.3 HttpUtil 将okhttp封装,并配合eventbus进行信息发送

3.4 RequestTemplate 将网络请求的一些参数进行封装,比如post的键值对

3.5 T toast的封装

3.6 Utils ?检查网络

4 MainActivity

public classMainActivityextendsBaseActivity {
@Bind(R.id.textView)
TextViewtextView;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//? ? ? ? setContentView(R.layout.activity_main);
}
@Override
protected voidinitData() {
mRequest.getWeather();
}
@Override
protected intgetContentViewId() {
returnR.layout.activity_main;
}
@Override
protected voidonThreadEvent(BackGroundMessage object) {
newThread(newRunnable() {
@Override
public voidrun() {
SystemClock.sleep(5000);
runOnUiThread(newRunnable() {
@Override
public voidrun() {
T.show("EventBus好美");
}
});
}
}).start();
}
@Override
protected voidonServiceEvent(ServiceMessage sm) {
if(sm.isSuccess){
switch(sm.tag){
caseRequestTemplate.WEATHER:
textView.setText(sm.msg);
break;
}
}
}
@Override
protected voidonNormEvent(EventMessage em) {
switch(em.tag){
caseEventMessage.NO_NETWORK:
textView.setText("我是主线程返回的");
break;
}
}
}

这里我写了三个对象,EventMessage,ServiceMessage和BackGroundMessage 前两个是作用主线程的返回的,最后一个是作用于子线程用的。其实完全可以写一个类,只不过需要在这个类里面有一个字段可以用于区分就可以了。

最后显示的结果是这样子的。完成了基础网络架构的搭建可能数据没处理看起来挺怪异。如有细节部分需要了解,还需去项目中去查看。

测试.png

eventbustest's People

Contributors

visayang avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.