美文网首页
2020-05-08

2020-05-08

作者: 细雨么么 | 来源:发表于2020-05-08 17:02 被阅读0次
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'

相关文章

网友评论

      本文标题:2020-05-08

      本文链接:https://www.haomeiwen.com/subject/vvtqnhtx.html