Retrofit使用总结

Retrofit

Gradle引入

//rxjava
compile 'io.reactivex.rxjava2:rxjava:2.1.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
//retrofit
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.1'

Retrofit注解

HTTP请求方法

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • HTTP(官网上没有见用这个的例子)

标记类

  • FormUrlEncoded
  • Multipart

参数类

  • Path
  • Field
  • FieldMap
  • Part
  • PartMap
  • Header
  • Headers
  • Query
  • QueryMap
  • Url

Retrofit与RxJava

用Retrofit就是为了能和RxJava一块使用,优雅的请求网络。

下面是几个常用注解。

GET、Path
public interface GetCommunityList {
     @GET("Forum/get_forum_list/{id}")
     Observable<CommunityListBean> getCommunityList(@Path("id") int id);
}
POST、FormUrlEncoded
public interface Post {
    @POST("UserAdministration/Administration_posts_menu")
    @FormUrlEncoded
    Observable<FenQuListBean> getFenQulList(@Field("user_id") String uid,@Field("fid") String fid);
}
Multipart
public interface UpLoadUserBg {
    //单张图片上传
    @Multipart
    @POST("UserCenter/update_back_ground")
    Observable<DefultData> updateImage(@Part MultipartBody.Part file);

    //多张图片上传
    @Multipart
    @POST("UserCenter/update_back_ground")
    Observable<DefultData> updateImage(@Part MultipartBody.Part[] file, @Part("uid") RequestBody token);

}
使用

简单封装了一下请求。

public class RetrofitServiceManager {
    private  Retrofit mRetrofit;

    private RetrofitServiceManager() {
        mRetrofit = new Retrofit.Builder()
                .baseUrl("http://baidu.com/app.php/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
    }
    private static class SingletonHolder{
        private static final RetrofitServiceManager INSTANCE = new RetrofitServiceManager();
    }
    /**
     * 获取RetrofitServiceManager
     * @return
     */
    public static RetrofitServiceManager getInstance(){
        return SingletonHolder.INSTANCE;
    }
    /**
     * 获取对应的Service
     * @param service Service 的 class
     * @param <T>
     * @return
     */
    public <T> T create(Class<T> service){
        return mRetrofit.create(service);
    }
}

具体使用

 RetrofitServiceManager.getInstance()
            .create(GetCommunityList.class)
            .getCommunityList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<CommunityListBean>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {

                }

                @Override
                public void onNext(@NonNull CommunityListBean beanInfo) {

                    setValues(beanInfo);
                }

                @Override
                public void onError(@NonNull Throwable e) {

                }

                @Override
                public void onComplete() {

                }
            });

两个接口同时调用

可以看到使用了merge操作符,将两个请求合并到了一起,在onNext中进行判断处理

 Observable.merge(RetrofitServiceManager.getInstance()
            .create(GetThemeRecom.class)
            .getThemeRecomData(UserId), 
            RetrofitServiceManager.getInstance()
            .create(ThemeCircleList.class)
            .getThemeCircleList()).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Object>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {

                }

                @Override
                public void onNext(@NonNull Object obj) {
                    if (obj instanceof ThemeRecom) {
                        setValues((ThemeRecom) obj);
                    }
                    if (obj instanceof ThemeCircleListBean) {
                        if (CLEAR_DATA) {
                            mStrings.clear();
                        }
                        mStrings.addAll(((ThemeCircleListBean) obj).getData());

                    }
                }

                @Override
                public void onError(@NonNull Throwable e) {
                }

                @Override
                public void onComplete() {

                }
            });

上传图片

File file1 = new File(mCorpImageMap.get("image"));
    File file2 = new File(mCorpImageMap.get("reimage"));
    RequestBody requestFile1 = RequestBody.create(MediaType.parse("multipart/form-data"), file1);
    RequestBody requestFile2 = RequestBody.create(MediaType.parse("multipart/form-data"), file2);
    RequestBody tokenBody = RequestBody.create(MediaType.parse("text/plain"), UserUtils.getUserId());
    MultipartBody.Part[] file = new MultipartBody.Part[2];
    file[0] = MultipartBody.Part.createFormData("image", file1.getName(), requestFile1);
    file[1] = MultipartBody.Part.createFormData("reimage", file2.getName(), requestFile2);
    RetrofitServiceManager.getInstance()
            .create(UpLoadUserBg.class)
            .updateImage(file, tokenBody)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<DefultData>() {
                @Override
                public void onSubscribe(@NonNull Disposable d) {

                }

                @Override
                public void onNext(@NonNull DefultData defultData) {
                    if (defultData.getStatus()==1)
                        Toast.makeText(UserPageActivity.this, "背景墙修改成功", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onError(@NonNull Throwable e) {
                }

                @Override
                public void onComplete() {

                }
            });

https://square.github.io/retrofit/

http://www.jianshu.com/p/308f3c54abdd

http://blog.csdn.net/lmj623565791/article/details/51304204

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值