Retrofit和RxJava加OkHttp网络请求进行二次封装

来源:互联网 发布:天下3鬼墨女捏脸数据 编辑:程序博客网 时间:2024/05/21 17:57
package com.baway.zhengwenjie20171104.net;import android.util.Log;import java.util.concurrent.TimeUnit;import okhttp3.OkHttpClient;import okhttp3.logging.HttpLoggingInterceptor;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;/** * Created by zwj on 2017/11/4. */public class RetrofitUtil {    private static RetrofitUtil retrofitUtil;    private RetrofitUtil() {    }    public static RetrofitUtil getInstance() {        if (retrofitUtil == null) {            synchronized (RetrofitUtil.class) {                if (retrofitUtil == null) {                    retrofitUtil = new RetrofitUtil();                }            }        }        return retrofitUtil;    }    private static Retrofit retrofit;    public static synchronized Retrofit getRetrofit(String url) {        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {            @Override            public void log(String message) {                Log.i("xxx", message);            }        });        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).connectTimeout(3000, TimeUnit.SECONDS).build();        if (retrofit == null) {            retrofit = new Retrofit.Builder()                    .client(okHttpClient)                    .baseUrl(url)                    .addConverterFactory(GsonConverterFactory.create())                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                    .build();        }        return retrofit;    }    public <T> T getApiService(String url, Class<T> cl) {        Retrofit retrofit = getRetrofit(url);        return retrofit.create(cl);    }}
----------ApiService接口---------------------
package com.bewei.retrofitandrxjava.inter;import com.bewei.retrofitandrxjava.bean.News;import com.bewei.retrofitandrxjava.bean.User;import retrofit2.http.GET;import retrofit2.http.Path;import rx.Observable;/** * 1. 类的用途 * 2. @author forever * 3. @date 2017/11/3 10:13 */public interface ApiService {    /**     * 结合Retrofit+RxJava     * thtp://service.meiyinkeqiu.com/service/ads/cptj     * @param     * @return     */    @GET("ads/cptj")    Observable<News> getNoParams();    /**     * 结合RxJava     * @param user     * @return     * https://api.github.com/users/forever/     */    @GET("users/{user}")  Observable<User>  getHasParams(@Path("user")String user);}
---------------ApiServive接口不加RxJava(参数拼接参考)--------------
package com.bewei.retrofit.inter;import com.bewei.retrofit.R;import com.bewei.retrofit.bean.News;import com.bewei.retrofit.bean.Party;import com.bewei.retrofit.bean.User;import okhttp3.MultipartBody;import okhttp3.RequestBody;import retrofit2.Call;import retrofit2.http.Field;import retrofit2.http.FormUrlEncoded;import retrofit2.http.GET;import retrofit2.http.Multipart;import retrofit2.http.POST;import retrofit2.http.Part;import retrofit2.http.Path;import retrofit2.http.Query;/** * 1. 类的用途 网络接口 * 2. @author forever * 3. @date 2017/11/1 14:32 */public interface ApiService {    /**     * 无参get请求     * http://service.meiyinkeqiu.com/service/ads/cptj     *     * @return     */    @GET("service/ads/cptj")    Call<News> getNoParams();    /**     * 有参get请求     * 拼接参数 /形式     *     * @return https://api.github.com/users/baiiu     */    @GET("users/{user}")   Call<User> getHasParams(@Path("user") String user);    /**     * http://www.93.gov.cn/93app/data.do     * channelId     * startNum     * 拼接 ? &     * 为主     */    @GET("data.do")   Call<Party> getHasParams2(@Query("channelId")int channelId, @Query("startNum") int startNum );    /**     * post请求 http://120.27.23.105/user/reg 注册     */    @POST("reg")    @FormUrlEncoded//支持表单提交    Call<User> register(@Field("mobile")String mobile,@Field("password")String password);    /**     * 上传图片 参数只有一个 File     * @param     * @param file     * @return     */    @Multipart    @POST("08web/FileUploadServlet")  Call<User>  uploadPic( @Part MultipartBody.Part file);    /**     * 上传图片 参数有2个 uid  file     * @param     * @param file     * @return     */    @Multipart    @POST("file/upload")  Call<User>  uploadPic2(@Part("uid")RequestBody uid, @Part MultipartBody.Part file);}
--------------进行网络请求Model--------------------
public void getData(final OnFinish onFinish, String lx, String page) {    ApiService apiService = RetrofitUtil.getInstance().getApiService(Api.XW, ApiService.class);    Observable<List<JavaBean>> observable = apiService.getHasParams(lx,page);    observable.subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .subscribe(new Observer<List<JavaBean>>() {                @Override                public void onCompleted() {                }                @Override                public void onError(Throwable e) {                }                @Override                public void onNext(List<JavaBean> javaBeen) {                    onFinish.onSuccess(javaBeen);                }            });}

原创粉丝点击