public interface BaseApi {
String url="http://192.168.1.221";
@GET(url+":8089/login.read")
Observable<InterNetResponse> getData(@QueryMap Map<String,Object> options);
@GET("http://192.168.1.220:8078/e.smvc")
Observable<InterNetResponse<AttendResult>> getData2(@QueryMap Map<String,Object> options);
}
public class HttpLogHelper implements Interceptor {
Charset charset = Charset.forName("UTF-8");
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (isDebug) {
Log.v("test", request.url().toString());
}
Response response;
try {
response = chain.proceed(request);
ResponseBody responseBody = response.body();
BufferedSource source = responseBody.source();
source.request(Long.MAX_VALUE); // Buffer the entire body.
Buffer buffer = source.buffer();
if (isDebug) {
Log.v("testHttpLogHelper", buffer.clone().readString(charset));
Headers headers = request.headers();
for (int i = 0, count = headers.size(); i < count; i++) {
String name = headers.name(i);
// Skip headers from the request body as they are explicitly logged above.
if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(name)) {
Log.v("testHttpLogHelper",name + ": " + headers.value(i));
}
}
}
} catch (IOException e) {
Log.e("test IOException",e.getMessage()+"");
throw e;
}
return response;
}
}
public class HttpResultObserver<O> implements Observer<O> {
public void onFinished(){
}
public void onFailure(String msg){
}
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(O o) {
}
@Override
public void onError(Throwable e) {
onFailure(e.getMessage() + "");
ProgressUtil.hideDialog();
}
@Override
public void onComplete() {
ProgressUtil.hideDialog();
onFinished();
}
}
public class InterNetResponse<Result> {
public int result;
public String message;
public Result data;
}
public class NormalTransform<O> implements ObservableTransformer<InterNetResponse<O>, O> {
private WeakReference<Context> mContext;
private String tipsMessage;
public NormalTransform(Context context, String tipsMessage) {
mContext = new WeakReference<>(context);
this.tipsMessage = tipsMessage;
}
@Override
public ObservableSource<O> apply(Observable<InterNetResponse<O>> upstream) {
return upstream.compose(new SimpleTransform<O>(mContext.get(), tipsMessage))
/**
* flatmap 类型转换上下流内容行驶
*/
.flatMap(new Function<InterNetResponse<O>, ObservableSource<O>>() {
@Override
public ObservableSource<O> apply(InterNetResponse<O> oInterNetResponse) throws Exception {
if (oInterNetResponse == null || oInterNetResponse.data == null) {
throw new Exception("无可用数据");
} else {
return Observable.just(oInterNetResponse.data);
}
}
})
;
}
}
public class ProgressUtil {
private static ProgressDialog dialog;
public static void showDialog(Context context, String message) {
if (dialog != null && dialog.isShowing()) {
dialog.setMessage(message);
} else {
dialog = new ProgressDialog(context);
dialog.setMessage(message);
dialog.setCancelable(true);
dialog.show();
}
}
public static void hideDialog() {
if (dialog != null) {
dialog.dismiss();
}
}
}
public class ResponseJsonDeser<O> implements JsonDeserializer<InterNetResponse<O>> {
@Override
public InterNetResponse<O> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
InterNetResponse response = new InterNetResponse();
if (json.isJsonObject()) {
JsonObject asJsonObject = json.getAsJsonObject();
if (!asJsonObject.get("msg").isJsonNull()) {
response.message = asJsonObject.get("msg").getAsString();
}
int code = asJsonObject.get("result").getAsInt();
response.result = code;
if (code == 0) {
Type itemType = ((ParameterizedType) typeOfT).getActualTypeArguments()[0];
try {
response.data = context.deserialize(asJsonObject.get("data"), itemType);
} catch (JsonParseException e) {
e.printStackTrace();
}
}
}
return response;
}
}
public class RetrofitUtil {
private static String baseUrl = "http://192.168.1.220";
private static BaseApi mApi;
public static BaseApi getApi() {
if (mApi == null) {
synchronized (RetrofitUtil.class) {
OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder();
Gson gson = new GsonBuilder()
.registerTypeHierarchyAdapter(InterNetResponse.class, new ResponseJsonDeser<>())
.setLenient()
.create();
okHttpClient.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.addInterceptor(new HttpLogHelper());
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient.build());
mApi = builder.build().create(BaseApi.class);
}
}
return mApi;
}
}
public class SimpleTransform<O> implements ObservableTransformer<InterNetResponse<O>, InterNetResponse<O>> {
private WeakReference<Context> mContext;
private String tipMessage;
public SimpleTransform(Context context, String tipStr) {
mContext = new WeakReference<>(context);
tipMessage = tipStr;
}
@Override
public ObservableSource<InterNetResponse<O>> apply(Observable<InterNetResponse<O>> upstream) {
return upstream.subscribeOn(Schedulers.io())
.doOnSubscribe(new Consumer<Disposable>() {
/**
* 订阅的时候 显示弹出框啥的
*/
@Override
public void accept(Disposable disposable) throws Exception {
if (mContext.get() != null) {
Context context = mContext.get();
ProgressUtil.showDialog(context, tipMessage);
}
}
})
.observeOn(AndroidSchedulers.mainThread())
.map(new Function<InterNetResponse<O>, InterNetResponse<O>>() {
/**
* MAP数据处理
*/
@Override
public InterNetResponse<O> apply(InterNetResponse<O> oInterNetResponse) throws Exception {
if (oInterNetResponse != null && oInterNetResponse.result == 0) {
return oInterNetResponse;
} else {
String backMessage = "网络错误";
if (oInterNetResponse != null) {
backMessage = oInterNetResponse.message;
}
throw new Exception(backMessage);
}
}
});
}
}
public interface MApi {
@GET("cl/ogin1.read")
Observable<BackData> login(@Query("name")String name,
@Query("password")String pwd);
@GET("http://192.168.1.220:8093/loadDeptCarTree.smvc")
Observable<BackData> getCar(@Query("parameters") String queryData);
@GET("http://192.168.1.220:8094/queryByOilCard.smvc")
Observable<BackData> getcarCode(@QueryMap HashMap<String,Object> options);
}
package com.vortex.newRetroRx;
import com.vortex.net.HttpLogHelper;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by Administrator (chenPS) on 2020/8/7.
*/
public class RetrofitUtils {
private static MApi mApi;
private static String baseUrl = "http://192.168.1.221:8089";
public static MApi getApi() {
if (mApi == null) {
synchronized (RetrofitUtils.class) {
if (mApi == null) {
OkHttpClient.Builder okBuilder = new OkHttpClient.Builder()
.readTimeout(5, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.addInterceptor(new HttpLogHelper()); //这里会抛异常注意 on error
// okBuilder.addInterceptor(new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// Request request = chain.request();
// Response orires = chain.proceed(request);
// return orires.newBuilder().header().addHeader().build();
// return orires;
// }
// });
Retrofit.Builder rbuilder = new Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okBuilder.build());
mApi = rbuilder.build().create(MApi.class);
}
}
}
return mApi;
}
}
package com.vortex.newRetroRx;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import retrofit2.HttpException;
/**
* Created by Administrator (chenPS) on 2020/8/8.
*/
public abstract class ResultObserver<T> implements Observer<T> {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(T t) {
Log.e("testResultObserver","onNext");
if (t instanceof BackData) {
if(((BackData) t).result==0){
dosucess(t);
}else{
dofauluer(((BackData) t).msg);
}
}
}
@Override
public void onError(Throwable e) {
Log.e("testResultObserver","onError");
if(e instanceof IOException){
dofauluer("连接异常");
}else if(e instanceof HttpException){
try {
JSONObject jsonObject=new JSONObject(((HttpException) e).response().errorBody().string());
dofauluer(jsonObject.optInt("status")+" "+jsonObject.optString("message"));
} catch (IOException ex) {
ex.printStackTrace();
dofauluer("连接异常");
} catch (JSONException ex) {
ex.printStackTrace();
dofauluer("连接异常");
}
}else{
dofauluer(e.getMessage().toString());
}
}
@Override
public void onComplete() {
Log.e("testResultObserver","onComplete");
}
public abstract void dosucess(T t);
public abstract void dofauluer(String msg);
}
package com.vortex.newRetroRx;
import android.app.ProgressDialog;
import android.content.Context;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Predicate;
import io.reactivex.schedulers.Schedulers;
import io.reactivex.subjects.PublishSubject;
/**
* Created by Administrator (chenPS) on 2020/8/8.
*/
public class Test6Transform<O> implements ObservableTransformer<BackData<O>, BackData<O>> {
private Context mContext;
private boolean showDialog;
private String msg;
private PublishSubject<ActivityLifeEvent> lifeSubject;
public Test6Transform(PublishSubject<ActivityLifeEvent> lifeSubject) {
this.lifeSubject = lifeSubject;
showDialog = false;
}
public Test6Transform(Context context, String msg, PublishSubject<ActivityLifeEvent> lifeSubject) {
mContext = context;
this.showDialog = true;
this.msg = msg;
this.lifeSubject = lifeSubject;
}
@Override
public ObservableSource<BackData<O>> apply(Observable<BackData<O>> upstream) {
Observable stopObservable = lifeSubject.filter(new Predicate<ActivityLifeEvent>() {
@Override
public boolean test(ActivityLifeEvent activityLifeEvent) throws Exception {
return activityLifeEvent == ActivityLifeEvent.DESTORY;
}
});
return upstream.takeUntil(stopObservable)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
if (showDialog) {
ProgressDialog progressDialog = new ProgressDialog(mContext);
progressDialog.setMessage(msg);
progressDialog.show();
}
}
});
}
}
package com.vortex.newRetroRx;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import io.reactivex.subjects.PublishSubject;
/**
* Created by Administrator (chenPS) on 2020/8/8.
*/
public abstract class Base6Activity extends AppCompatActivity{
public final PublishSubject<ActivityLifeEvent> lifeSubject=PublishSubject.create();
private String TagStr="";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifeSubject.onNext(ActivityLifeEvent.CREAT);
TagStr=setStringName();
}
@Override
protected void onResume() {
super.onResume();
lifeSubject.onNext(ActivityLifeEvent.RESUME);
}
@Override
protected void onPause() {
super.onPause();
lifeSubject.onNext(ActivityLifeEvent.PAUSE);
}
@Override
protected void onDestroy() {
super.onDestroy();
lifeSubject.onNext(ActivityLifeEvent.DESTORY);
}
public void LodD(String str){
Log.d(TagStr,str);
}
public abstract String setStringName();
}
package com.vortex.newRetroRx;
import com.google.gson.annotations.SerializedName;
/**
* Created by Administrator (chenPS) on 2020/8/8.
*/
public class BackData<T> {
@SerializedName(value = "result",alternate = {"status"})
public int result;
@SerializedName(value = "msg",alternate = {"error"})
public String msg;
public T data;
@Override
public String toString() {
return "BackData{" +
"result=" + result +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
compile 'io.reactivex.rxjava2:rxjava:2.2.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.2'
compile 'com.google.code.gson:gson:2.8.4'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
//转换结果Gson
compile 'com.squareup.retrofit2:converter-scalars:2.0.0'
//转换结果String
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
网友评论