kotlin转化

This commit is contained in:
2022-08-26 17:32:44 +08:00
parent 8e4d517c40
commit 2aa61c64b3
18 changed files with 791 additions and 58 deletions
@@ -0,0 +1,21 @@
package com.arpa.hndahesudintocctmsdriver.request.net;
import com.arpa.hndahesudintocctmsdriver.BuildConfig;
/**
* Created by Administrator on 2018/8/8 0008.
*/
public interface Api {
String BASE_URL = "BuildConfig.BASE_URL";
//获取版本
String VERSION = BASE_URL + "app/version";
}
@@ -0,0 +1,60 @@
package com.arpa.hndahesudintocctmsdriver.request.net;
import android.content.Context;
import com.dahe.mylibrary.net.CommonResponseBean;
import io.reactivex.Observer;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
/**
* 自定义观察者
*/
public class BaseObserver<T> implements Observer<CommonResponseBean<T>> {
private Context mContext;
private RxHttpCallBack<T> mRxHttpCallBack;
private Disposable disposable;
public BaseObserver(Context mContext, RxHttpCallBack<T> mRxHttpCallBack) {
this.mContext = mContext;
this.mRxHttpCallBack = mRxHttpCallBack;
}
/**
* 订阅成功
*
* @param d
*/
@Override
public void onSubscribe(@NonNull Disposable d) {
this.disposable = d;
mRxHttpCallBack.onStart();
}
@Override
public void onNext(CommonResponseBean<T> tCommonResponseBean) {
if (200==tCommonResponseBean.getCode()) {
mRxHttpCallBack.onSuccess(tCommonResponseBean);
} else {
mRxHttpCallBack.onCodeError(mContext, tCommonResponseBean);
}
}
@Override
public void onError(Throwable e) {
mRxHttpCallBack.onFailure(mContext, e);
if (disposable!=null&&disposable.isDisposed()){
disposable.dispose();
}
}
@Override
public void onComplete() {
}
}
@@ -0,0 +1,161 @@
package com.arpa.hndahesudintocctmsdriver.request.net;
import android.util.Log;
import com.dahe.mylibrary.net.JsonUtils;
import com.dahe.mylibrary.utils.MD5Utils;
import com.dahe.mylibrary.utils.StringUtils;
import com.dahe.mylibrary.utils.TimeUtil;
import com.google.gson.Gson;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import okhttp3.MediaType;
import okhttp3.RequestBody;
/**
* Created by Administrator on 2017/4/15 0015.
*/
public class CreateJsonUtils {
public static CreateJsonUtils utils = null;
private static final String TAG = "GetJsonUtils";
public static CreateJsonUtils getInstance() {
if (null == utils) {
synchronized (CreateJsonUtils.class) {
if (null == utils) {
utils = new CreateJsonUtils();
}
}
}
return utils;
}
/**
* 得到请求体的json数据
*
* @param key jsonObject的key
* @param value jsonObject的value 如果要请求jsonObject里面嵌套jsonObject的value只需要传map 否就传简单的数据类型
* @return
*/
public String getRequest(String[] key, Object[] value) {
Map<String, Object> map = new HashMap<>();
for (int i = 0; i < key.length; i++) {
if (value[i] instanceof Map) {
Map<Object, Object> sonMap = new HashMap<>();
Map<Object, Object> sonDateMap = (Map<Object, Object>) value[i];
List<String> keyList = getMapKey(sonDateMap);
for (int j = 0; j < keyList.size(); j++) {
sonMap.put(keyList.get(j), sonDateMap.get(keyList.get(j)));
}
map.put(key[i], sonMap);
} else if (value[i] instanceof List) {
map.put(key[i], value[i]);
} else if (value[i] instanceof String) {
map.put(key[i], value[i].toString());
} else {
map.put(key[i], value[i]);
}
}
map.put("api_key", "xccdb-power-bank");
map.put("sign", MD5Utils.md5(JsonUtils.getInstance().getGson().toJson(map)));
map.put("time", TimeUtil.getNowMills());
Log.i(TAG, new Gson().toJson(map));
return new Gson().toJson(map);
}
/**
* 获取map里面的所有值
*
* @param hashmp
* @return
*/
public List<String> getMapKey(Map hashmp) {
List<String> list = new ArrayList<>();
Set set = hashmp.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
String key = (String) iter.next();
list.add(key);
}
return list;
}
public Map<String, Integer> getPagerMap(int page, int count) {
Map<String, Integer> map = new HashMap<>();
map.put("page", page);
map.put("count", count);
return map;
}
/**
* 无参数的请求
*
* @return
*/
public Map<String, RequestBody> createRequestBody() {
return createRequestBody(new String[]{}, new String[]{});
}
/**
* 生成请求的body
*
* @param key
* @param value
* @return
*/
public Map<String, RequestBody> createRequestBody(String[] key, Object[] value) {
Map<String, RequestBody> requestBodyMap = new HashMap<>();
Map<String, Object> requestDataMap = new HashMap<>();
String signStr = "";
for (int i = 0; i < key.length; i++) {
requestDataMap.put(key[i], value[i]);
}
try {
signStr = (sign1(requestDataMap) + "&api_key=xccdb-power-bank").replaceFirst("&", "");
Log.i(TAG, "createRequestBody: " + sign1(requestDataMap));
} catch (JSONException e) {
e.printStackTrace();
}
Log.i(TAG, "createRequestBody: " + signStr);
for (String keySet : requestDataMap.keySet()) {
requestBodyMap.put(keySet, RequestBody.create(MediaType.parse("multipart/form-data"), requestDataMap.get(keySet) + ""));
}
Log.i(TAG, "createRequestBody: " + MD5Utils.md5((signStr)));
requestBodyMap.put("sign", RequestBody.create(MediaType.parse("multipart/form-data"),
MD5Utils.md5((signStr))));
requestBodyMap.put("time", RequestBody.create(MediaType.parse("multipart/form-data"), TimeUtil.getNowMills() / 1000 + ""));
return requestBodyMap;
}
public String sign1(Map params) throws JSONException {
JSONObject header = new JSONObject(JsonUtils.getInstance().getGson().toJson(params));
//获取header元素集合
Iterator headerIt = header.keys();
List<String> list = new ArrayList<String>();
//把header元素集合迭代 出 "param=value"形式字符串放入list集合中
while (headerIt.hasNext()) {
String param = headerIt.next().toString();
String value = StringUtils.encode(header.getString(param));
list.add(param + "=" + value);
}
Collections.sort(list);
String paramStr = "";
//迭代list拼装签名sign
for (int i = 0; i < list.size(); i++) {
paramStr += "&" + list.get(i);
}
String signStr = paramStr;
return signStr;
}
}
@@ -0,0 +1,60 @@
package com.arpa.hndahesudintocctmsdriver.request.net;
import com.dahe.mylibrary.CommonBaseLibrary;
import com.dahe.mylibrary.net.JsonInterceptor;
import java.util.concurrent.TimeUnit;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.ObservableSource;
import io.reactivex.rxjava3.core.ObservableTransformer;
import io.reactivex.rxjava3.schedulers.Schedulers;
import okhttp3.OkHttpClient;
/**
* Created by Administrator on 2018/8/8 0008.
*/
public class DataManager {
private volatile static DataManager mInstance;
public DataManager() {
}
public static <T> ObservableTransformer<T, T> setThread() {
return new ObservableTransformer<T, T>() {
@Override
public ObservableSource<T> apply(Observable<T> upstream) {
return upstream.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
}
};
}
public static Api getInstance() {
if (null == mInstance) {
synchronized (DataManager.class) {
if (null == mInstance) {
mInstance = new DataManager();
}
}
}
return api();
}
public static Api api() {
return CommonBaseLibrary.getRetrofit().newBuilder()
.client(new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.addInterceptor(new JsonInterceptor())
.addInterceptor(new RequestHeadInterceptor())
.build())
// .addNetworkInterceptor(new TokenInterceptor())
.build().create(Api.class);
}
}
@@ -0,0 +1,43 @@
package com.arpa.hndahesudintocctmsdriver.request.net;
import android.text.TextUtils;
import android.util.Log;
import com.arpa.hndahesudintocctmsdriver.App;
import com.arpa.hndahesudintocctmsdriver.ui.login.LoginActivity;
import com.arpa.hndahesudintocctmsdriver.util.SPUtils;
import com.arpa.hndahesudintocctmsdriver.util.sp.SPUtil;
import com.dahe.mylibrary.utils.AppUtils;
import com.dahe.mylibrary.utils.BaseUtils;
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
/**
* 头部Interceptor
*/
public class RequestHeadInterceptor implements Interceptor {
private static final String TAG = "RequestHeadInterceptor";
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
if (!TextUtils.isEmpty(SPUtil.getSP(App.getApp(), LoginActivity.USER,LoginActivity.USER_TOKEN))) {
// builder.addHeader("Authorization", SPUtils.getUserInfo(App.getApp()).getToken());
builder.addHeader("Authorization", "Bearer "+SPUtil.getSP(App.getApp(), LoginActivity.USER,LoginActivity.USER_TOKEN));
}
Request request = builder
.addHeader("versionCode", AppUtils.getAppVersionCode() + "")
.addHeader("versionValue", AppUtils.getAppVersionName() + "")
.addHeader("deviceType", "ANDROID")
.addHeader("language", BaseUtils.getLanguage(App.getApp())+"")
.build();
Log.i(TAG, "intercept: " + request.headers());
return chain.proceed(request);
}
}
@@ -0,0 +1,132 @@
package com.arpa.hndahesudintocctmsdriver.request.net;
import android.accounts.NetworkErrorException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.view.Window;
import com.arpa.hndahesudintocctmsdriver.ui.login.LoginActivity;
import com.dahe.mylibrary.net.CommonResponseBean;
import com.dahe.mylibrary.net.ResultException;
import com.dahe.mylibrary.utils.ToastUtils;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.concurrent.TimeoutException;
import javax.net.ssl.SSLException;
/**
* 统一的网络回调
*/
public abstract class RxHttpCallBack<T> {
private ProgressDialog dialog;
private void initDialog(Activity activity, String dialogMessage) {
dialog = new ProgressDialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(false);
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
dialog.setMessage(dialogMessage);
}
public RxHttpCallBack(Activity activity, String dialogMessage) {
initDialog(activity, TextUtils.isEmpty(dialogMessage) ? "网络请求中......" : dialogMessage);
}
public RxHttpCallBack(Activity activity) {
initDialog(activity, "网络请求中......");
}
public RxHttpCallBack() {
}
/**
* 订阅成功
*/
public void onStart() {
if (dialog != null && !dialog.isShowing()) {
dialog.show();
}
}
public void onStop(){
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
/**
* 返回成功
*
* @param t
* @throws Exception
*/
public void onSuccess(CommonResponseBean<T> t) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
/**
* 返回成功了,但是code错误
*
* @param t
* @throws Exception
*/
public void onCodeError(Context mContext, CommonResponseBean<T> t) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
if (t.getCode() == 401) {
// UserUtils.Companion.getInstance().loginOut(mContext);
Intent intent = new Intent(mContext, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
ToastUtils.showToast(mContext,"您的账号再异地登录,请重新登录");
}else{
ToastUtils.showToast(mContext,t.getMsg());
}
// if (t.getMessage().getMsg_code() == 100 && SPUtils.hasUserInfo(mContext)) {
// SPUtils.remove(mContext, SPUtils.USER_INFO_KEY);
// } else {
// ToastUtils.showToast(mContext, t.getMessage().getMsg_desc());
// }
}
/**
* 返回失败
*
* @param e
* @throws Exception
*/
public void onFailure(Context mContext, Throwable e) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
if (e instanceof ConnectException
|| e instanceof TimeoutException
|| e instanceof SocketTimeoutException
|| e instanceof SSLException
|| e instanceof NetworkErrorException
|| e instanceof UnknownHostException) {
ToastUtils.showToast(mContext, "请检查您的网络~");
} else if (e instanceof ResultException) {
e.printStackTrace();
//自定义的ResultException
//由于返回200,300返回格式不统一的问题,自定义GsonResponseBodyConverter凡是300的直接抛异常
// System.out.println("---------errorCode------->"+((ResultException) e).getErrCode());
}else if (e instanceof SSLException){
ToastUtils.showToast(mContext, "网络连接终端,请检查您的网络~");
}else{
ToastUtils.showToast(mContext, e.getMessage());
}
}
}
@@ -0,0 +1,48 @@
package com.arpa.hndahesudintocctmsdriver.request.net;
import org.json.JSONObject;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.Buffer;
import okio.BufferedSource;
public class TokenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
ResponseBody responseBody = response.body();
if (responseBody != null) {
BufferedSource source = responseBody.source();
source.request(Long.MAX_VALUE); // Buffer the entire body.
Buffer buffer = source.buffer();
try {
String result = buffer.clone().readString(StandardCharsets.UTF_8);
JSONObject jsonObject = new JSONObject(result);
int code = jsonObject.getInt("code");
if (code == -1) {//判断返回code
// SPUtils.cleanUserInfo(App.getApp());
// Intent intent = new Intent(App.getApp(), LoginActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
// App.getApp().startActivity(intent);
// ToastUtils.showToast(App.getApp(), "您的账号再异地登录,请重新登录");
// ToastUtils.showShort("身份过期,请重新登录");
//跳转方式
//1.使用MyApplication添加跳转
//2.使用路由跳转
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
}