Git Product home page Git Product logo

mvpproject's Introduction

注:该工程由MVP+Retrofit+rxjava框架,经过测试无太大问题。但是由于是自己在搭公司项目的前期框架 之后不会进一步更新工程内容,只会更新自己封装框架的bug,欢迎看官指出我的错漏

阅读帮助

该工程作为启动项目的前期框架,里面只有几个接口用来测试网络引擎的正确性

主要工程模块:

该项目以MVP框架作为**基础搭建起来,为了避免内存泄露,稍微从几个固定的搭建模式中做了点修改。

1.ui文件夹:用于存放activity以及fragment等视图文件 相当于MVP中view的角色

2.model文件夹:用于存放数据,相当于MVP中Model角色

3.Contract文件夹:用于存放mvp用来相互关联的接口管理,(用法详见代码,和参照google的mvp文档)

4.Preseneter文件夹:用于存放Mvp角色中Presenter角色。里面的类全部继承了BasePresnter(BasePresenter对持有长时间的引用用了弱引用处理)

5.utils文件夹:用于工程中的工具类,里面有rxBus的工具类,以及sharesdk的接法LoginApi。

6.network文件夹:用于工程的网络引擎(由Rxjava+Retrofit封装)

7.Dao文件夹:用于封装每个模块的网络请求的具体方法

网络引擎用法


该网络引擎RetrofitManager其实就是对Retrofit.Builder进一步封装,完成了链式调用,想办法简化其中流程,用法如下:

现在ApiService接口创建一个Retrofit的方法

 @POST("api/goods/goodsInfo")
    @FormUrlEncoded
    Observable<Response<ResponseBody>> firstRequest(@Field("id")String id, @Field("unique_id")String unique_id);

在对应的Dao模块创建请求方法

	public static void FirstRequest(final String id, final String unique_id, final BaseCallBack baseCallBack){
        RetroFitManager.getInstance()
                .setUrl("")
                .addLog(true)
                .setCallBackListener(new RetroFitManager.ResponseCallBack() {
                    @Override
                    public void setResponseCallBack(ApiService handlercenter) {
                        handlercenter.firstRequest(id,unique_id)
                                .subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread())
                                .subscribe(new BaseObserver() {
                                    @Override
                                    public void onNext(String content) {
                                        //此处可以做解析json数据,content已经去掉了code和message
                                        baseCallBack.success(content);
                                    }

                                    @Override
                                    public void onError(int code, String error) {
                                        //此处可以获取错误代码和错误
                                        baseCallBack.failed(code,error);
                                    }

                                    @Override
                                    public void onComplete() {

                                    }
                                });
                    }
                })
                .create();

方法说明:
setUrl():是用来设置url的服务器地址

addLog(boolean token):用来设置自己的做的网络拦截器,添加打印完整url+参数,token是指是否添加存放在LoginUtils的token(注:retrofit中不可以没有请求参数,当只有token的时候最好添加上)

setCallBackListener(ResponseCallBack CallBack):用来处理网络回应的Response体回调

BaseObserver():抽象类用来处理一般的Response的结构,将成功失败的数据分别传出。自己想要处理自己的相应体结构不可不必使用这个BaseObserver

create():用来创建Rtrofit+rxjava链式方法

最后的调用:

 UserDao.FirstRequest("46", "869515024751809", new BaseCallBack() {
            @Override
            public void success(Object data) {
                mView.loadingData();
            }

            @Override
            public void failed(int errorCode, Object data) {

            }

            @Override
            public void failed(Object data) {

            }
        });

在对应的位置进行处理:success:是回调成功,onerror是回调失败或者服务器返回错误等处理

RxBus的调用

1.先注册,将对应的类注册到了订阅者的队列中:

RxBus.getDefault().register(this);

2.记住在onDestroy记得注销,避免内存泄露:

  RxBus.getDefault().unregister(this);
  

3.建立一个带 @Subcuribe({HandlerThread.MAIN})的方法

  HandlerThread.MAIN,HandlerThread.IO

里面的参数时用来处理方法进行的动作是UI线程工作还是io线程工作,例子:

@Subcuribe({HandlerThread.MAIN})
    public void handler(RxPost ev){
        switch (ev.getTag()){
            case IEvent.LOGIN:
                nickname.setText("登录");
                LoginUtils.setIsLogin(true);
                break;
            case IEvent.LOGINOUT:
                nickname.setText("未登录");
                LoginUtils.setIsLogin(false);
                break;
        }
    }

结束语


本人只是一个android领域里面的菜鸟,虽然搭了几个工程的框架,以后觉得有的思路还算的上可以,给大家看看我错漏,毕竟一个人摸黑走,确实成长太慢了。 希望大家不吝啬指教,这个工程虽然为了这个工程专门适配了不少地方,以后我想办法,同一个通用框架出来,便于自己的工程。

mvpproject's People

Contributors

yjy239 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.