Android開發之Retrofit的使用

依賴

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    /*
    * 下面的爲自己添加
    * */
    
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.okhttp3:okhttp:3.12.1'
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.4'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
    implementation 'org.greenrobot:greendao:3.2.2'
    // add library

    implementation 'com.facebook.fresco:fresco:1.11.0'

    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
    implementation 'com.android.support:design:28.0.0'
    // 普通banner
    implementation 'com.youth.banner:banner:1.4.9'
    // 魅族banner
    implementation 'com.github.pinguo-zhouwei:MZBannerView:v2.0.0'
    //GreenDao數據庫
    implementation 'org.greenrobot:greendao-generator:3.2.2'
}
greendao {
    schemaVersion 1  //版本
    daoPackage 'demo.com.demo01.dao' // 一般爲app包名+生成文件的文件夾名
    targetGenDir 'src/main/java' //生成文件路徑
}

1、封裝網絡工具類

public class NewWorkHttp {
    private static NewWorkHttp netWork;
    private static final String BSAE_URL = "http://172.17.8.100/small/";
//    String BSAE_URL = "http://169.254.101.220:8080/";
    private Retrofit retrofit;

    private NewWorkHttp() {
        init();
    }

    public static NewWorkHttp getNetWorks(){
        if (netWork == null) {
            netWork = new NewWorkHttp();
        }
        return netWork;
    }

    private void init() {
        // 攔截器
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        // 設置攔截器
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        // 設置okhttp
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(httpLoggingInterceptor)
                .connectTimeout(10,TimeUnit.MINUTES)
                .readTimeout(10,TimeUnit.MINUTES)
                .writeTimeout(10,TimeUnit.MINUTES)
                .build();

        // 初始化 Retrofit
        retrofit = new Retrofit.Builder()
                .client(okHttpClient)
                .baseUrl(BSAE_URL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    public <T> T create(final Class<T> service){
        return retrofit.create(service);
    }

}

2、Basepresenter


public abstract class BasePresenter {
    private DataCall consumer;
    private boolean runing;

    public BasePresenter(DataCall consumer) {
        this.consumer = consumer;
    }

    public void requestNet(Object... args) {
        if (runing)
            return;
        runing = true;
        observable(args)
                .compose(ResponseTransformer.handleResult())///
                .compose(new ObservableTransformer() {
                    @Override
                    public ObservableSource apply(Observable upstream) {
                        return upstream.subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread());
                    }
                })
//                .subscribeOn(Schedulers.newThread())// 子線程
//                .observeOn(AndroidSchedulers.mainThread())// 主線程
                .subscribe(new Consumer<Result>() {
                    @Override
                    public void accept(Result o) throws Exception {
                        consumer.success(o);
                        runing = false;
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        consumer.fail(CustomException.handleException(throwable));
                        runing = false;
                    }
                });
    }

    protected abstract Observable observable(Object... args);

    public void unBind() {
        this.consumer = null;
    }

    public boolean isRuning() {
        return runing;
    }
}

3、接口

 
    @POST("user/v1/register")
    @FormUrlEncoded
    Observable<RegisterData> getRegister(@Field("phone") String phone, @Field("pwd") String pwd);

4、接口


public interface DataCall<T> {
    void success(T data);
    void fail (ApiException a);
}

5、presenter


public class RegisterPresenter extends BasePresenter {
    public RegisterPresenter(DataCall consumer) {
        super(consumer);
    }

    @Override
    protected Observable observable(Object... args) {
        IRequest iRegister = NewWorkHttp.getNetWorks().create(IRequest.class);
        Observable<RegisterData> registerRegister = iRegister.getRegister((String) args[0], (String) args[1]);
        return registerRegister;
    }

// 僅個人使用 勿噴

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章