依赖(Retrofit+RxJava):
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' compile 'com.squareup.retrofit2:converter-scalars:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0'
依赖(Okhttp+Gson+Recycleview+Frsco+Glide+Imageloader。。。。)
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.squareup.okhttp3:logging-interceptor:3.9.0' compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.google.code.gson:gson:2.8.2' compile 'io.github.openfeign:feign-gson:9.5.1' compile 'com.facebook.fresco:fresco:1.5.0' compile 'com.youth.banner:banner:1.4.10' compile 'com.xhb:xbanner:1.2.2' compile 'com.nineoldandroids:library:2.4.0' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'jp.wasabeef:glide-transformations:1.0.6' compile 'com.journeyapps:zxing-android-embedded:3.3.0' compile 'com.jcodecraeer:xrecyclerview:1.3.2'
工具类net包(登录事例):
ServerApi类
package com.bwie.rxjava.net; import com.bwie.rxjava.bean.BaseBean; import com.bwie.rxjava.bean.LoginBean; import java.util.Map; import io.reactivex.Flowable; import retrofit2.http.FieldMap; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; public interface ServerApi { //BaseUrl public static final String BASE = "http://120.27.23.105/"; //Get登录 @GET("user/login") Flowable<LoginBean> login(@Query("mobile") String mobile, @Query("password") String password); //post注册 @FormUrlEncoded @POST("user/reg") Flowable<BaseBean> reg(@FieldMap Map<String, String> params); }
RetrofitHelper类
package com.bwie.rxjava.net; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitHelper { private static OkHttpClient okHttpClient; private static ServerApi serverApi; static { initRetro(); } private static OkHttpClient initRetro() { //OK自定义拦截器 LoggingInterceptor loggingInterceptor = new LoggingInterceptor(); //Ok默认拦截器 HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); if (okHttpClient==null){ synchronized (RetrofitHelper.class){ if(okHttpClient==null){ okHttpClient=new OkHttpClient.Builder() .addInterceptor(logging) .connectTimeout(3000, TimeUnit.MILLISECONDS) .build(); } } } return okHttpClient; } public static ServerApi getServerApi(){ if(serverApi==null){ synchronized (ServerApi.class){ if(serverApi==null){ serverApi= RetrofitHelper.careteApi(ServerApi.class,ServerApi.BASE); } } } return serverApi; } public static <T> T careteApi(Class<T> clazz,String url){ Retrofit retrofit = new Retrofit.Builder().baseUrl(ServerApi.BASE) .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); return retrofit.create(clazz); } }
OnNetListener类
package com.bwie.rxjava.net; public interface OnNetListener<T> { public void onSuccess(T t); public void onFailure(Exception e); }
LoggingInterceptor类
package com.bwie.rxjava.net; import java.io.IOException; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; public class LoggingInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); //GET自定义拦截器 if (request.method().equals("GET")) { HttpUrl url = request.url().newBuilder() .addQueryParameter("source", "android") .build(); //添加请求头 Request newrequest = request.newBuilder() .url(url) .build(); return chain.proceed(newrequest); }else { //POST自定义拦截器 String url = request.url().url().toString(); url+="&source=android"; Request newRequset = request.newBuilder().url(url).build(); return chain.proceed(newRequset); } } }
GlideImageLoader类
package com.bwie.rxjava.net; import android.content.Context; import android.net.Uri; import android.widget.ImageView; import com.facebook.drawee.view.SimpleDraweeView; import com.youth.banner.loader.ImageLoader; public class GlideImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { /** 注意: 1.图片加载器由自己选择,这里不限制,只是提供几种使用方法 2.返回的图片路径为Object类型,由于不能确定你到底使用的那种图片加载器, 传输的到的是什么格式,那么这种就使用Object接收和返回,你只需要强转成你传输的类型就行, 切记不要胡乱强转! */ //用fresco加载图片简单用法,记得要写下面的createImageView方法 Uri uri = Uri.parse((String) path); imageView.setImageURI(uri); } //提供createImageView 方法,如果不用可以不重写这个方法,主要是方便自定义ImageView的创建 @Override public ImageView createImageView(Context context) { //使用fresco,需要创建它提供的ImageView,当然你也可以用自己自定义的具有图片加载功能的ImageView SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context); return simpleDraweeView; } }