MVP+Retrofit+RxJava+okHttp实现网络加载的简单使用

//导的base库
implementation project(':base')
//okhttp
implementation 'com.squareup.okhttp3:okhttp:3.10.0'

implementation 'com.jakewharton:butterknife:8.4.0'

annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
//rxjava
implementation 'io.reactivex.rxjava2:rxjava:+'
implementation 'io.reactivex.rxjava2:rxandroid:+'
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
//ok的拦截器
 implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
//版本转换
configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '27.1.1'
            }
        }
    }


//RetrofitFactory 
public class RetrofitFactory {

    private final MyApi myApi;
    private static RetrofitFactory retrofitFactory;

    private RetrofitFactory() {
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(5000, TimeUnit.SECONDS)
                .readTimeout(5000, TimeUnit.SECONDS)
                .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://www.xieast.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();
        myApi = retrofit.create(MyApi.class);
    }

    public static RetrofitFactory getINSTANCE() {
        if (retrofitFactory == null) {
            synchronized (RetrofitFactory.class) {
                if (retrofitFactory == null) {
                    retrofitFactory = new RetrofitFactory();
                }
            }
        }
        return retrofitFactory;
    }

    public MyApi getMyApi() {
        return myApi;
    }
}
//myapi

public interface MyApi {
    @GET("api/news/news.php")
    Observable<JavaBean> getJavaBean();
}




//
Model

public class Model extends BaseModel {
        public  void getJavabean(final IMyModel1 iMyView)
        {
            RetrofitFactory.getINSTANCE().getMyApi()
                    .getJavaBean()
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Observer<JavaBean>() {
                        @Override
                        public void onSubscribe(Disposable d) {

                        }

                        @Override
                        public void onNext(JavaBean javaBean) {
                            List<JavaBean.DataBean> data = javaBean.getData();
                            iMyView.onSuccess(javaBean);
                        Log.i("zzzm",data.size()+"");
                        }

                        @Override
                        public void onError(Throwable e) {

                        }

                        @Override
                        public void onComplete() {

                        }
                    });
        }

    public interface IMyModel1 {
        void onSuccess(JavaBean javaBean);
    }
}



//
Presenter 
public class Presenter extends BasePresenter<Model,IMyView> {
    public  void  getJavaBean()
    {
        model.getJavabean(new Model.IMyModel1() {
            @Override
            public void onSuccess(JavaBean javaBean) {
                view.onSuccess(javaBean);
            }
        });
    }
}




//IMYview
public interface IMyView extends IBaseView {
    void onSuccess(JavaBean javaBean);
    void onfilg();
}
view层
public class MainActivity extends BaseActivity<Presenter>implements IMyView {
    @Override
    protected void initDate() {
    presenter.getJavaBean();
    }

    @Override
    protected BaseModel initModel() {
        return new Model();
    }

    @Override
    protected Presenter initPresenter() {
        return new Presenter();
    }

    @Override
    protected void initView() {

    }

    @Override
    protected int setChildView() {
        return R.layout.activity_main;

    }

    @Override
    public void onSuccess(JavaBean javaBean) {
        Toast.makeText(MainActivity.this,javaBean.getData().get(0).getTitle().toString(),Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onfilg() {
        Toast.makeText(MainActivity.this,"数据请求失败",Toast.LENGTH_SHORT).show();
    }
}

猜你喜欢

转载自blog.csdn.net/wumeng5211314/article/details/80851464