国产探花免费观看_亚洲丰满少妇自慰呻吟_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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄江县| 台安县| 宁陕县| 安宁市| 都兰县| 西平县| 怀安县| 香港| 福州市| 罗城| 清苑县| 岢岚县| 辽阳市| 商河县| 沙坪坝区| 文水县| 灵丘县| 昌图县| 正阳县| SHOW| 柘城县| 昌黎县| 大丰市| 牟定县| 霸州市| 探索| 五华县| 浪卡子县| 石台县| 工布江达县| 蒙山县| 体育| 东兴市| 安泽县| 聂拉木县| 诸城市| 龙山县| 高碑店市| 射洪县| 奉节县| 黔江区|