国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

簡單實用的mvp+retrofit+rxjava+dagger2

2019-11-06 09:46:34
字體:
來源:轉載
供稿:網友

如今android最為流行的網絡請求框架莫過于retrofit+rxjava,網上也是誕生了大量mvp+retrofit+rxjava的相關技術文章,但他們的要么太過于復雜要么針對性太強,讓很多人用到一半就放棄了,本人也是初學者,參考了很多技術牛人寫的例子,大家一起交流學習,下面是一個模擬獲取新聞數據的例子,不多bb。

項目結構圖

dagger2的包和mvp的包

RequestObservable類中單例接口容器和自定義okhttp

    /**     * 自定義okhttpclient     */   PRivate static OkHttpClient okHttpClient = new OkHttpClient.Builder()            .connectTimeout(15, TimeUnit.SECONDS)            .build();//            .addInterceptor(interceptor)//            .cache(cache).build();    public static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();    public static CallAdapter.Factory rxJavaCallAdapterFactory = RxJavaCallAdapterFactory.create();    /**     * 獲得接口的容器 注意baseUrl要以“/”結尾     * @param     * @return     */    public static Api getApi() {        if (retrofit == null) {            synchronized (Retrofit.class) {                if (retrofit == null) {                    retrofit = new Retrofit.Builder()                            .client(okHttpClient)                            .baseUrl("http://apis.guokr.com/handpick/")                            .addConverterFactory(gsonConverterFactory)                            .addCallAdapterFactory(rxJavaCallAdapterFactory)                            .build();                }            }        }        api = retrofit.create(Api.class);        return api;    }統一請求地址存放的接口
public interface Api {    //http://apis.guokr.com/handpick/article.json?retrieve_type=by_since&category=all&limit=3&ad=1    @GET("article.json")    Observable<NewsEntity> getNewsData(@QueryMap Map<String, String> map);}

網絡請求的公共方法,自己做了接口回調,retrofit+rxjava的回調用著很不習慣:

package com.dianzhi.bookdemo.http;import rx.Observable;import rx.Observer;import rx.Subscription;import rx.android.schedulers.AndroidSchedulers;import rx.schedulers.Schedulers;/** * Created by CK on 2017/2/17. */public class Network {    /**     * get請求     *     * @param observable     * @param backListener     */    public static Subscription get(Observable observable, CallBackListener backListener) {        return observable.subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(getObserve(backListener));    }    /**     * 構造observer     *     * @param backListener     * @return     */    private static Observer getObserve(final CallBackListener backListener) {        Observer observer = new Observer() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {                if (backListener != null) {                    backListener.onError(e.getMessage());                    backListener.onFinish();                }            }            @Override            public void onNext(Object o) {                if (backListener != null) {                    backListener.onSuccess(o);                    backListener.onFinish();                }            }        };        return observer;    }}mvp的代碼就不貼了,到時放出地址,再來看看dagger2的簡單運用,代碼里注釋非常詳細

@Component(modules = NewsModule.class)public interface NewsCompoent {    //定義注入的目標"地點"    void inject(MainActivity activity);}Module層的代碼,這層就是提供類對象方法的容器

@Modulepublic class NewsModule {    private NewsContract.View view;    public NewsModule(NewsContract.View view) {        this.view = view;    }    @Provides    NewsContract.View provide() {        return this.view;    }//前面提到MainActivity需要一個NewsPresenter的對象,dagger2會先在NewsModule里找有沒有一個可以提供NewsPresenter對象的方法,// 結果是NewsContract.Presenter并不是,這個是他的契約父類(注意參數和返回值不能一樣不然會進入死循環,自己找自己引起),方法返回//了參數傳過來的NewsPresenter對象,直接去找NewsPresenter的構造方法    @Provides    NewsContract.Presenter provideNewsPresenter(NewsPresenter newsPresenter) {        return newsPresenter;    }}如果對dagger2不適合很了解可以看下這邊文章最簡單的Dagger2入門教學

最后是整個地址mvp+retrofit+rxjava+dagger2


上一篇:JAVA學習之數組基礎

下一篇:java split

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都昌县| 洪洞县| 望城县| 龙海市| 微博| 阳谷县| 汉寿县| 册亨县| 华安县| 高平市| 河池市| 宕昌县| 杂多县| 长春市| 呼图壁县| 巴东县| 尚志市| 拉萨市| 乌鲁木齐县| 万源市| 长乐市| 凤阳县| 海淀区| 江源县| 托克逊县| 南充市| 柯坪县| 镇赉县| 射阳县| 南召县| 宾川县| 花莲县| 楚雄市| 日喀则市| 武川县| 安岳县| 策勒县| 常州市| 桃源县| 晋中市| 福州市|