From 0ec9693c39a910233fc186a8cefab9f61030df78 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期五, 07 三月 2025 18:09:32 +0800 Subject: [PATCH] refactor(generallibrary):重构网络请求模块 --- generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt | 1 generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserBeanRequest.kt | 70 +++++ qiheonlinelibrary/build.gradle | 4 qihealonelibrary/build.gradle | 4 pickerviewlibrary/build.gradle | 4 generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt | 28 ++ easysocket/src/main/AndroidManifest.xml | 2 baselibrary/build.gradle | 10 gradlew.bat | 1 generallibrary/src/main/java/com/dayu/general/net/ApiService.kt | 10 build.gradle | 7 generallibrary/src/main/AndroidManifest.xml | 3 generallibrary/src/main/java/com/dayu/general/net/MyJsonParser.kt | 259 ++++++++++++++++++ henanlibrary/build.gradle | 4 generallibrary/src/main/java/com/dayu/general/net/BaseResponse.kt | 2 generallibrary/src/main/java/com/dayu/general/bean/net/BaseResult.kt | 9 gradlew | 35 + henanlibrary/src/main/AndroidManifest.xml | 3 app/src/main/AndroidManifest.xml | 2 generallibrary/src/main/java/com/dayu/general/net/RetrofitClient.kt | 21 generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt | 86 ++++- easysocket/build.gradle | 6 generallibrary/src/main/java/com/dayu/general/net/MyIntercepterApplication.kt | 8 baselibrary/src/main/AndroidManifest.xml | 6 generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt | 247 +++++++++-------- ocridcardlibrary/build.gradle | 3 baselibrary/src/main/java/com/dayu/baselibrary/tools/print/ShangMiAidlUtil.java | 2 27 files changed, 642 insertions(+), 195 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 451c135..880e013 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.dayu.henanlibrary"> + > <uses-permission android:name="android.permission.NFC" /> <!--鐢ㄤ簬璁块棶缃戠粶锛岀綉缁滃畾浣嶉渶瑕佷笂缃�--> diff --git a/baselibrary/build.gradle b/baselibrary/build.gradle index a2a0dfa..cbf5578 100644 --- a/baselibrary/build.gradle +++ b/baselibrary/build.gradle @@ -1,7 +1,8 @@ apply plugin: 'com.android.library' android { - compileSdk 33 + namespace 'com.dayu.baselibrary' + compileSdk 34 defaultConfig { minSdk 23 targetSdk 26 @@ -26,12 +27,17 @@ viewBinding { enabled = true; } + sourceSets { + main { + aidl.srcDirs = ['src/main/aidl'] + } + } } dependencies { - compileOnly fileTree(include: ['*.jar'], dir: 'exlibs') + implementation fileTree(include: ['*.jar'], dir: 'exlibs') implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' diff --git a/baselibrary/src/main/AndroidManifest.xml b/baselibrary/src/main/AndroidManifest.xml index 894f91e..3179967 100644 --- a/baselibrary/src/main/AndroidManifest.xml +++ b/baselibrary/src/main/AndroidManifest.xml @@ -1,7 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.dayu.baselibrary"> - + > + <queries> + <package android:name="woyou.aidlservice.jiuiv5" /> + </queries> <application android:allowBackup="true" android:supportsRtl="true" diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/print/ShangMiAidlUtil.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/print/ShangMiAidlUtil.java index 4ff30e0..c643e29 100644 --- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/print/ShangMiAidlUtil.java +++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/print/ShangMiAidlUtil.java @@ -25,6 +25,8 @@ import woyou.aidlservice.jiuiv5.ICallback; import woyou.aidlservice.jiuiv5.IWoyouService; + + /** * 鍟嗙背鎵撳嵃妯″潡鐩稿叧浠g爜 */ diff --git a/build.gradle b/build.gradle index 10e4aeb..b590da7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,9 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + ext { + agp_version = '8.2.0' + agp_version1 = '7.2.2' + } +}// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id 'com.android.application' version '7.2.2' apply false id 'com.android.library' version '7.2.2' apply false diff --git a/easysocket/build.gradle b/easysocket/build.gradle index bd5fdf8..54e0968 100644 --- a/easysocket/build.gradle +++ b/easysocket/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 27 + namespace 'com.easysocket' + compileSdk 34 //buildToolsVersion rootProject.ext.android.buildToolsVersion defaultConfig { @@ -26,5 +27,4 @@ compileOnly 'com.tencent.bugly:crashreport:4.1.9.3' } -sourceCompatibility = "7" -targetCompatibility = "7" + diff --git a/easysocket/src/main/AndroidManifest.xml b/easysocket/src/main/AndroidManifest.xml index e18d960..07f0047 100644 --- a/easysocket/src/main/AndroidManifest.xml +++ b/easysocket/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.socket" > + > <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> </manifest> diff --git a/generallibrary/src/main/AndroidManifest.xml b/generallibrary/src/main/AndroidManifest.xml index 593d0cb..5f247eb 100644 --- a/generallibrary/src/main/AndroidManifest.xml +++ b/generallibrary/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.dayu.henanlibrary"> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.NFC" /> <!--鐢ㄤ簬璁块棶缃戠粶锛岀綉缁滃畾浣嶉渶瑕佷笂缃�--> diff --git a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt index c0fb6d5..1a655b0 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserActivity.kt @@ -1,11 +1,15 @@ package com.dayu.general.activity import android.os.Bundle -import android.widget.Toast +import com.dayu.baselibrary.net.subscribers.SubscriberListener +import com.dayu.baselibrary.utils.ToastUtil import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE import com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_IMAGE +import com.dayu.general.bean.net.SearchUserResult import com.dayu.general.databinding.ActivitySearchUserGeBinding import com.dayu.general.dialog.SearchDialog +import com.dayu.general.net.BaseResponse +import com.dayu.qiheonlinelibrary.net.ApiManager /** * @author: zuo @@ -44,31 +48,69 @@ searchDialog.show() } } + /** * 鎵ц鎼滅储閫昏緫 * 杩欓噷鍙槸涓�涓ず渚嬫柟娉曪紝瀹為檯搴旂敤涓渶瑕佹牴鎹叿浣撻渶姹傚疄鐜� */ private fun performSearch(farmerId: String, farmerName: String, cardNumber: String) { - // 杩欓噷鍙互瀹炵幇瀹為檯鐨勬悳绱㈤�昏緫 - // 渚嬪锛氳皟鐢ˋPI銆佹煡璇㈡暟鎹簱绛� - - // 绀轰緥锛氭瀯寤烘悳绱㈡潯浠� - val searchConditions = mutableMapOf<String, String>() - - if (farmerId.isNotEmpty()) { - searchConditions["farmerId"] = farmerId - } - - if (farmerName.isNotEmpty()) { - searchConditions["farmerName"] = farmerName - } - - if (cardNumber.isNotEmpty()) { - searchConditions["cardNumber"] = cardNumber - } - - // 鏍规嵁鎼滅储鏉′欢鎵ц鎼滅储 - // 瀹為檯搴旂敤涓紝杩欓噷鍙兘鏄綉缁滆姹傛垨鏁版嵁搴撴煡璇� - // searchRepository.search(searchConditions) + // 璋冪敤瀹為檯鐨勬悳绱PI + searchUser(farmerId, farmerName, cardNumber) } + + private fun searchUser(farmerId: String, farmerName: String, cardNumber: String) { + val map = mutableMapOf<String, String>() + + if (farmerId.isNotEmpty()) { + map["farmerId"] = farmerId + } + + if (farmerName.isNotEmpty()) { + map["farmerName"] = farmerName + } + + if (cardNumber.isNotEmpty()) { + map["cardNumber"] = cardNumber + } + + // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� + ApiManager.getInstance().requestGetLoading( + this, + "searchUser", + SearchUserResult::class.java, + map, + object : SubscriberListener<BaseResponse<SearchUserResult>>() { + override fun onNext(t: BaseResponse<SearchUserResult>) { + if (t.success) { + // 澶勭悊鎼滅储鎴愬姛鐨勬儏鍐� + val result = t.content + if (result != null) { + // 澶勭悊鎼滅储缁撴灉 + handleSearchResult(result) + } else { + ToastUtil.show("鏈壘鍒板尮閰嶇殑鐢ㄦ埛") + } + } else { + // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� + ToastUtil.show(t.msg) + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}") + } + } + ) + } + + /** + * 澶勭悊鎼滅储缁撴灉 + */ + private fun handleSearchResult(result: SearchUserResult) { + // 鍦ㄨ繖閲屽疄鐜版悳绱㈢粨鏋滅殑澶勭悊閫昏緫 + // 渚嬪锛氭洿鏂癠I鏄剧ず鎼滅储缁撴灉鍒楄〃 + // 鎴栬�呰烦杞埌缁撴灉璇︽儏椤甸潰 + } + } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/BaseResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/BaseResult.kt new file mode 100644 index 0000000..2ab6b24 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/BaseResult.kt @@ -0,0 +1,9 @@ +package com.dayu.general.bean.net + +/** + * Description: + * Author: zuo + * Date: 2025/3/7 + */ +class BaseResult<T> { +} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserBeanRequest.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserBeanRequest.kt new file mode 100644 index 0000000..1950d26 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserBeanRequest.kt @@ -0,0 +1,70 @@ +package com.dayu.general.bean.net + +/** + * Description:鎼滅储 + * Author: zuo + * Date: 2025/3/7 + */ +class SearchUserBeanRequest { + + + /** + * 鍐滄埛濮撳悕锛屾敮鎸佹ā绯婃煡璇� + * 绀轰緥鍊�: 鐮旂┒闄� + */ + var name: String? = null + + /** + * 鍐滄埛缂栧彿锛屾敮鎸佹ā绯婃煡璇� + * 绀轰緥鍊�: 281012090001 + */ + var clientNum: String? = null + + /** + * 鎵嬫満鍙凤紝鏀寔妯$硦鏌ヨ + * 绀轰緥鍊�: 18633333333 + */ + var phone: String? = null + + /** + * 璇︾粏鍦板潃锛屾敮鎸佹ā绯婃煡璇� + * 绀轰緥鍊�: 铚� + */ + var address: String? = null + + /** + * 鎵�鍦ㄦ潙 + * 绀轰緥鍊�: 2024062709530800002 + */ + var villageId: String? = null + + /** + * 鎵�鍦ㄧ墖鍖� + */ + var blockId: String? = null + + /** + * 鎵�鍦ㄥ垎姘存埧 + */ + var divideId: String? = null + + /** + * 姘村崱缂栧彿锛屾敮鎸佹ā绯婃煡璇� + * 绀轰緥鍊�: 53232810100600001 + */ + var cardNum: String? = null + + /** + * 褰撳墠椤电爜锛屽繀闇� + * 绀轰緥鍊�: 1 + */ + var pageCurr: Int = 1 + + /** + * 姣忛〉璁板綍鏁帮紝蹇呴渶 + * 绀轰緥鍊�: 10 + */ + var pageSize: Int = 10 + + +} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt new file mode 100644 index 0000000..9a70342 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt @@ -0,0 +1,28 @@ +package com.dayu.general.bean.net + +/** + * Description: 鎼滅储鐢ㄦ埛缁撴灉Bean + * Author: zuo + * Date: 2025/3/7 + */ +data class SearchUserResult( + val itemTotal: Int, // 鎬绘潯鐩暟 + val obj: List<UserInfo>, // 鐢ㄦ埛淇℃伅鍒楄〃 + val pageCurr: Int, // 褰撳墠椤电爜 + val pageSize: Int, // 姣忛〉澶у皬 + val pageTotal: Int // 鎬婚〉鏁� +) { + /** + * 鐢ㄦ埛淇℃伅 + */ + data class UserInfo( + val address: String? = null, // 鍦板潃 + val cardCount: Int? = null, // 鍗℃暟閲� + val clientNum: String? = null, // 瀹㈡埛缂栧彿 + val id: Int? = null, // ID + val idCard: String? = null, // 韬唤璇� + val name: String? = null, // 濮撳悕 + val operateDt: String? = null, // 鎿嶄綔鏃ユ湡 + val phone: String? = null // 鐢佃瘽 + ) +} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt b/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt index 6dab3dc..8837b74 100644 --- a/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt +++ b/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt @@ -1,66 +1,96 @@ -package com.dayu.general.net +package com.dayu.qiheonlinelibrary.net import android.content.Context -import android.text.TextUtils -import com.dayu.baselibrary.business.BusinessProvider -import com.dayu.baselibrary.net.subscribers.BaseProgressSubscriber +import android.util.Log +import com.dayu.baselibrary.net.subscribers.ProgressSubscriber import com.dayu.baselibrary.net.subscribers.SubscriberListener +import com.dayu.general.net.ApiService +import com.dayu.general.net.BaseResponse +import com.dayu.general.net.MyJsonParser +import com.dayu.general.net.NetConstans +import com.dayu.general.net.RetrofitClient import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.functions.Function import io.reactivex.rxjava3.schedulers.Schedulers /** + * Copyright (C), 2023, + * Author: zuot + * Date: 2023-04-12 9:11 * Description: - * Author: zuo - * Date: 2025-03-06 */ -class ApiManager { +class ApiManager private constructor() { - var apiService: ApiService? = null + companion object { + private const val TAG = "ApiManager" - fun init() { - if (apiManager == null) { - apiManager = - com.dayu.qiheonlinelibrary.net.ApiManager() + @Volatile + private var apiManager: ApiManager? = null + + fun init() { + if (apiManager == null) { + synchronized(ApiManager::class) { + if (apiManager == null) { + apiManager = ApiManager() + } + } + } + } + + fun getInstance(): ApiManager { + return apiManager ?: throw IllegalStateException("ApiManager not initialized") } } - fun ApiManager() { - apiService = RetrofitClient.getInstance().getApiService() + private val apiService: ApiService = RetrofitClient.getInstance().getApiService() + + fun <T> requestGetLoading( + context: Context, + path: String, + tClass: Class<T>, + params: Map<String, Any>?, + listener: SubscriberListener<BaseResponse<T>> + ) { + request(context, false, path, true, tClass, params, listener) } - fun getInstance(): com.dayu.qiheonlinelibrary.net.ApiManager { - return apiManager + fun <T> requestGetHideLoading( + context: Context, + path: String, + tClass: Class<T>, + params: Map<String, Any>?, + listener: SubscriberListener<BaseResponse<T>> + ) { + request(context, true, path, true, tClass, params, listener) } fun <T> requestPostLoading( - context: Context?, - path: String?, - tClass: Class<T>?, - params: Map<String?, Any?>?, - listener: SubscriberListener<*>? + context: Context, + path: String, + tClass: Class<T>, + params: Map<String, Any>?, + listener: SubscriberListener<BaseResponse<T>> ) { request(context, false, path, false, tClass, params, listener) } fun <T> requestPostHideLoading( - context: Context?, - path: String?, - tClass: Class<T>?, - params: Map<String?, Any?>?, - listener: SubscriberListener<*>? + context: Context, + path: String, + tClass: Class<T>, + params: Map<String, Any>?, + listener: SubscriberListener<BaseResponse<T>> ) { request(context, true, path, false, tClass, params, listener) } fun <T> requestPost( - context: Context?, - path: String?, - tClass: Class<T>?, - params: Map<String?, Any?>?, - listener: SubscriberListener<*>? + context: Context, + path: String, + tClass: Class<T>, + params: Map<String, Any>?, + listener: SubscriberListener<BaseResponse<T>> ) { request(context, false, path, false, tClass, params, listener) } @@ -76,22 +106,20 @@ * @param params Post璇锋眰鏃讹紝瀵瑰簲鐨勫弬鏁� * @param listener 鍥炶皟璇锋眰 * @param <T> - </T> */ + */ fun <T> request( - context: Context?, + context: Context, hideLoading: Boolean, - path: String?, + path: String, isGet: Boolean, - tClass: Class<T>?, - params: Map<String?, Any?>?, - listener: SubscriberListener<*>? + tClass: Class<T>, + params: Map<String, Any>?, + listener: SubscriberListener<BaseResponse<T>> ) { - val observable: Observable<*>=if (isGet) { - if (params == null) { - apiService.requestGet(path) - } else { - apiService.requestGet(path, params) - } + + val observable = if (isGet) { + if (params == null) apiService.requestGet(path) + else apiService.requestGet(path, params) } else { if (params != null) { apiService.requestPost(path, params) @@ -100,77 +128,68 @@ } } - val mySubscriber: BaseProgressSubscriber<*>=ProgressSubscriber<Any?>(context, hideLoading, listener) - observable.subscribeOn(Schedulers.io()).map - object : Function<Any?, com.dayu.qiheonlinelibrary.net.BaseResponse<T>?> { - override fun apply(o: Any): com.dayu.qiheonlinelibrary.net.BaseResponse<T> { - if (o is com.dayu.qiheonlinelibrary.net.BaseResponse) { - val tem: com.dayu.qiheonlinelibrary.net.BaseResponse = - o as com.dayu.qiheonlinelibrary.net.BaseResponse - val response: com.dayu.qiheonlinelibrary.net.BaseResponse<T> = - com.dayu.qiheonlinelibrary.net.BaseResponse<T>() - //鏈櫥褰曟垨鐧诲綍瓒呮椂锛岃閲嶆柊鐧诲綍 - if (tem.getCode() == 100401) { - if (BusinessProvider.getBusinessProvider() != null) { - BusinessProvider.getBusinessProvider().startLoginNavigotor.navigateToLogin( - context - ) - } - } - response.setCode(tem.getCode()) - response.setMsg(tem.getMsg()) - if (tClass != null) { - if (TextUtils.isEmpty( - tem.getData().toString() - ) && BaseResult::class.java.isAssignableFrom(tClass) - ) { - response.setData(null) - return response - } - if (tem.getData() is Map<*, *>) { - try { -// response.setData(MyJsonParser.getBeanFromMap((Map<String, Object>) tem.getData(), tClass)); - val jsonData: String = - MyJsonParser.getJsontoMap(tem.getData() as Map<*, *>) - response.setData(MyJsonParser.getBeanFromJson<T>(jsonData, tClass)) - } catch (e: Exception) { - e.printStackTrace() - } - } else if (tem.getData() is List<*>) { - try { - response.setData( - MyJsonParser.getListByJson<T>( - MyJsonParser.getJsonbyList<Any>( - tem.getData() as List<*> - ), tClass - ) as T - ) - } catch (e: Exception) { - e.printStackTrace() - } - } else if (tem.getData() is Int) { - response.setData(tem.getData() as T) - } else if (tem.getData() is Boolean) { - response.setData(tem.getData() as T) - } - if (tClass.name is String && tem.getData() is String) { - try { - response.setData(tem.getData() as T) - } catch (e: Exception) { - e.printStackTrace() - } - } - return response - } - } + // 浣跨敤BaseResponse<T>浣滀负ProgressSubscriber鐨勬硾鍨嬬被鍨� + val mySubscriber = ProgressSubscriber<BaseResponse<T>>(context, hideLoading, listener); - return null + observable + ?.subscribeOn(Schedulers.io()) + ?.map(mapResponse(tClass)) + ?.unsubscribeOn(Schedulers.newThread()) + ?.observeOn(AndroidSchedulers.mainThread()) + ?.subscribe(mySubscriber) + } + + private fun <T> mapResponse(tClass: Class<T>): Function<Any, BaseResponse<T>> { + return Function { rawResponse -> + when (rawResponse) { + is BaseResponse<*> -> { + val temp = rawResponse + + // 鍒涘缓鏂扮殑鍝嶅簲瀵硅薄骞惰缃熀鏈睘鎬� + val response = BaseResponse<T>().apply { + code = temp.code + msg = temp.msg ?: "" + } + + // 澶勭悊token澶辨晥鐨勬儏鍐� + if (temp.code == NetConstans.TOKEN_INVALID) { + // 鍙互鍦ㄨ繖閲屾坊鍔犻噸瀹氬悜鍒扮櫥褰曢〉闈㈢殑閫昏緫 + // redirectToLogin() + return@Function response + } + + // 鏍规嵁鍐呭绫诲瀷杩涜澶勭悊 + when (val content = temp.content) { + is Map<*, *> -> { + try { + val jsonData = MyJsonParser.getJsontoMap(content as Map<String, Any>) + response.content = MyJsonParser.getBeanFromJson(jsonData, tClass) + } catch (e: Exception) { + Log.e(TAG, "Error parsing map content", e) + } + } + is List<*> -> { + try { + @Suppress("UNCHECKED_CAST") + response.content = MyJsonParser.getListByJson( + MyJsonParser.getJsonbyList(content), + tClass + ) as T + } catch (e: Exception) { + Log.e(TAG, "Error parsing list content", e) + } + } + is Int, is String, is Boolean -> { + @Suppress("UNCHECKED_CAST") + response.content = content as T + } + } + + response + } + else -> throw IllegalArgumentException("Unexpected response type") } } - .unsubscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(mySubscriber) } - - -} \ No newline at end of file + +} diff --git a/generallibrary/src/main/java/com/dayu/general/net/ApiService.kt b/generallibrary/src/main/java/com/dayu/general/net/ApiService.kt index 3992cc1..7aac48b 100644 --- a/generallibrary/src/main/java/com/dayu/general/net/ApiService.kt +++ b/generallibrary/src/main/java/com/dayu/general/net/ApiService.kt @@ -13,8 +13,8 @@ @POST fun requestPost( - @Url url: String?, - @Body params: Map<String?, Any?>? + @Url url: String, + @Body params: Map<String, Any?>? ): Observable<BaseResponse<Any?>>? @POST @@ -22,11 +22,11 @@ @GET("{url}") fun requestGet( - @Path("url") url: String?, - @QueryMap params: Map<String?, Any?>? + @Path("url") url: String, + @QueryMap params: Map<String, Any?>? ): Observable<BaseResponse<Any?>>? @GET("{url}") - fun requestGet(@Path("url") url: String?): Observable<BaseResponse<Any?>>? + fun requestGet(@Path("url") url: String): Observable<BaseResponse<Any?>>? } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/net/BaseResponse.kt b/generallibrary/src/main/java/com/dayu/general/net/BaseResponse.kt index 3097c10..d6aae48 100644 --- a/generallibrary/src/main/java/com/dayu/general/net/BaseResponse.kt +++ b/generallibrary/src/main/java/com/dayu/general/net/BaseResponse.kt @@ -6,7 +6,7 @@ * Date: 2025-03-06 */ class BaseResponse<T> { - var code: Int = 0 + var code: String = "" var msg: String? = null var content: T? = null var success:Boolean = false diff --git a/generallibrary/src/main/java/com/dayu/general/net/MyInercepterApplication.kt b/generallibrary/src/main/java/com/dayu/general/net/MyIntercepterApplication.kt similarity index 86% rename from generallibrary/src/main/java/com/dayu/general/net/MyInercepterApplication.kt rename to generallibrary/src/main/java/com/dayu/general/net/MyIntercepterApplication.kt index 95beb88..6a3d2dd 100644 --- a/generallibrary/src/main/java/com/dayu/general/net/MyInercepterApplication.kt +++ b/generallibrary/src/main/java/com/dayu/general/net/MyIntercepterApplication.kt @@ -1,7 +1,5 @@ package com.dayu.general.net -import android.text.TextUtils -import com.dayu.qiheonlinelibrary.QHOnLineApplication import com.tencent.bugly.crashreport.CrashReport import okhttp3.Interceptor import okhttp3.Protocol @@ -16,7 +14,7 @@ * Author: zuo * Date: 2025-03-06 */ -class MyInercepterApplication :Interceptor{ +class MyIntercepterApplication :Interceptor{ @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): Response { @@ -47,9 +45,7 @@ if (request.method == "GET") { builder.url(request.url.toString()) } else { - if (!TextUtils.isEmpty(QHOnLineApplication.getInstance().tokenStr)) { - builder.addHeader("Token-Cloud", QHOnLineApplication.getInstance().tokenStr) - } + } return builder.build() } catch (e: Exception) { diff --git a/generallibrary/src/main/java/com/dayu/general/net/MyJsonParser.kt b/generallibrary/src/main/java/com/dayu/general/net/MyJsonParser.kt new file mode 100644 index 0000000..8073839 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/net/MyJsonParser.kt @@ -0,0 +1,259 @@ +package com.dayu.general.net + +import android.text.TextUtils +import com.google.gson.Gson +import com.google.gson.GsonBuilder +import com.google.gson.JsonParser +import com.google.gson.LongSerializationPolicy +import org.json.JSONArray +import org.json.JSONException +import org.json.JSONObject +import java.lang.reflect.ParameterizedType +import java.lang.reflect.Type +import java.util.* + +/** + * Description: JSON瑙f瀽宸ュ叿绫� + * Author: zuo + * Date: 2025/3/7 + */ +class MyJsonParser { + + companion object { + /** + * 鑾峰彇Json瀛楃涓蹭腑鐨勫睘鎬у�� + */ + @JvmStatic + @Throws(JSONException::class) + fun getPropertyFromJson(json: String, attrName: String): Any? { + return try { + val jsonObject = JSONObject(json) + jsonObject.get(attrName) + } catch (e: JSONException) { + null + } + } + + /** + * 灏嗗璞¤浆鎹㈡垚Json瀛楃涓� + */ + @JvmStatic + fun <T> bean2Json(t: T?): String { + return try { + if (t == null || TextUtils.isEmpty(t.toString())) return "" + Gson().toJson(t) + } catch (e: Exception) { + e.printStackTrace() + "" + } + } + + /** + * 杞崲涓篢绫诲瀷 + */ + @JvmStatic + fun <T> json2Bean(json: String, tClass: Class<T>): T? { + return try { + if (!TextUtils.isEmpty(json)) { + Gson().fromJson(json, tClass) + } else null + } catch (e: Exception) { + e.printStackTrace() + null + } + } + + /** + * 灏咼son鐩存帴搴忓垪鍖栦负List + */ + @JvmStatic + fun <T> json2List(json: String, type: Type): List<T>? { + return try { + if (!TextUtils.isEmpty(json)) { + Gson().fromJson(json, type) + } else null + } catch (e: Exception) { + e.printStackTrace() + null + } + } + + private fun buildGson() = GsonBuilder().create() + + @JvmStatic + fun <T> getBeanFromJson(json: String, cl: Class<T>): T? { + return try { + buildGson().fromJson(json, cl) + } catch (e: Exception) { + e.printStackTrace() + null + } + } + + @JvmStatic + fun <T> getBeanFromJson(json: String, cl: Type): T? { + return try { + buildGson().fromJson(json, cl) + } catch (e: Exception) { + e.printStackTrace() + null + } + } + + @JvmStatic + fun <T> getBeanFromMap(map: Map<String, Any>, cl: Class<T>): T? { + return getBeanFromJson(getJsonFromMap(map), cl) + } + + @JvmStatic + fun getJsonFromMap(params: Map<String, Any>?): String { + if (params.isNullOrEmpty()) return "" + return getJSONObjectFromMap(params).toString() + } + + @JvmStatic + fun getJsontoMap(params: Map<*, *>): String { + return GsonBuilder() + .setLongSerializationPolicy(LongSerializationPolicy.STRING) + .serializeSpecialFloatingPointValues() + .create() + .toJson(params) + } + + @JvmStatic + fun <T> getJsonbyList(params: List<T>): String { + return Gson().toJson(params) + } + + @Suppress("UNCHECKED_CAST") + private fun getJSONObjectFromMap(params: Map<String, Any>): JSONObject { + val jsonObject = JSONObject() + for ((key, value) in params) { + try { + when (value) { + is List<*> -> { + if (value.isNotEmpty()) { + val array = JSONArray() + for (o in value) { + when (o) { + is Map<*, *> -> array.put(getJSONObjectFromMap(o as Map<String, Any>)) + is List<*> -> { + val array1 = JSONArray() + array1.put(getListFromJson(o.toString())) + array.put(array1) + } + else -> array.put(o) + } + } + jsonObject.put(key, array) + } + } + is Map<*, *> -> jsonObject.put(key, getJSONObjectFromMap(value as Map<String, Any>)) + else -> jsonObject.put(key, value) + } + } catch (e: JSONException) { + e.printStackTrace() + } + } + return jsonObject + } + + @JvmStatic + fun getMapFromJson(jsonStr: String?): HashMap<String, Any> { + val valueMap = LinkedHashMap<String, Any>() + if (jsonStr.isNullOrEmpty()) return valueMap + + try { + val jsonObject = JSONObject(jsonStr) + return getMapFromJsonObject(jsonObject) + } catch (e: Exception) { + e.printStackTrace() + } + return valueMap + } + + @JvmStatic + fun getListFromJsonArray(jsonArray: JSONArray): List<Any> { + val list = ArrayList<Any>() + try { + for (i in 0 until jsonArray.length()) { + when (val obj = jsonArray.get(i)) { + is JSONObject -> list.add(getMapFromJsonObject(obj)) + is JSONArray -> list.add(getListFromJsonArray(jsonArray)) + else -> { + if (obj != null && !TextUtils.isEmpty(obj.toString()) && obj.toString() != "null") { + list.add(obj) + } + } + } + } + } catch (e: JSONException) { + e.printStackTrace() + } + return list + } + + @JvmStatic + fun getMapFromJsonObject(jsonObj: JSONObject): HashMap<String, Any> { + val map = LinkedHashMap<String, Any>() + val keys = jsonObj.keys() + try { + while (keys.hasNext()) { + val key = keys.next() + when (val obj = jsonObj.get(key)) { + is JSONArray -> map[key] = getListFromJsonArray(obj) + is JSONObject -> map[key] = getMapFromJsonObject(obj) + is Number -> map[key] = obj.toString() + else -> { + if (obj != null && !TextUtils.isEmpty(obj.toString()) && obj.toString() != "null") { + map[key] = obj + } + } + } + } + } catch (e: JSONException) { + e.printStackTrace() + } + return map + } + + @JvmStatic + fun <T> getListFromJson(str: String, clazz: Class<T>): List<T>? { + return try { + val type = ParameterizedTypeImpl(clazz) + Gson().fromJson<List<T>>(str, type) + } catch (e: Exception) { + e.printStackTrace() + null + } + } + + @JvmStatic + fun <T> getListByJson(json: String, cls: Class<T>): List<T> { + val gson = Gson() + val list = ArrayList<T>() + val array = JsonParser().parse(json).asJsonArray + array.forEach { elem -> + list.add(gson.fromJson(elem, cls)) + } + return list + } + + @JvmStatic + fun getListFromJson(str: String): List<Any>? { + try { + val jsonArray = JSONArray(str) + return getListFromJsonArray(jsonArray) + } catch (e: Exception) { + e.printStackTrace() + } + return null + } + + private class ParameterizedTypeImpl(private val clazz: Class<*>) : ParameterizedType { + override fun getActualTypeArguments(): Array<Type> = arrayOf(clazz) + override fun getRawType(): Type = List::class.java + override fun getOwnerType(): Type? = null + } + } +} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt index 0c0e7f2..a6f1a41 100644 --- a/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt +++ b/generallibrary/src/main/java/com/dayu/general/net/NetConstans.kt @@ -9,6 +9,7 @@ companion object { const val BASE_URL: String = "http://120.46.45.35:20081/api/sjgg/" + const val TOKEN_INVALID: String = "0000" } } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/net/RetrofitClient.kt b/generallibrary/src/main/java/com/dayu/general/net/RetrofitClient.kt index 97bdbeb..aadfdd5 100644 --- a/generallibrary/src/main/java/com/dayu/general/net/RetrofitClient.kt +++ b/generallibrary/src/main/java/com/dayu/general/net/RetrofitClient.kt @@ -1,7 +1,6 @@ package com.dayu.general.net import com.dayu.baselibrary.BuildConfig -import com.dayu.qiheonlinelibrary.net.MyIntercepterApplication import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit @@ -14,7 +13,13 @@ * Author: zuo * Date: 2025-03-06 */ -class RetrofitClient { +class RetrofitClient// 鍖呭惈header銆乥ody鏁版嵁 +// loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS); +//璁剧疆杩炴帴鍜岃鍙栨椂闂� +//娣诲姞缁熶竴鐨刪eader +//娣诲姞鏃ュ織鎷︽埅鍣� +//娣诲姞鏁版嵁璇锋眰缁熶竴澶勭悊鎷︽埅鍣� + () { @@ -22,26 +27,19 @@ val READ_TIME_OUT: Int = 10 val CONNECT_TIME_OUT: Int = 10 - private fun RetrofitClient() { + + init { val loggingInterceptor = HttpLoggingInterceptor() - // 鍖呭惈header銆乥ody鏁版嵁 loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY) - // loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS); val builder: OkHttpClient.Builder = OkHttpClient().newBuilder() - //璁剧疆杩炴帴鍜岃鍙栨椂闂� builder.readTimeout(READ_TIME_OUT.toLong(), TimeUnit.SECONDS) builder.connectTimeout(CONNECT_TIME_OUT.toLong(), TimeUnit.SECONDS) builder.writeTimeout(CONNECT_TIME_OUT.toLong(), TimeUnit.SECONDS) - //娣诲姞缁熶竴鐨刪eader builder.addInterceptor(MyIntercepterApplication()) - //娣诲姞鏃ュ織鎷︽埅鍣� - //娣诲姞鏁版嵁璇锋眰缁熶竴澶勭悊鎷︽埅鍣� if (BuildConfig.DEBUG) { builder.addInterceptor(loggingInterceptor) } - val client: OkHttpClient = builder.build() - retrofit = Retrofit.Builder() .baseUrl(NetConstans.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) @@ -49,6 +47,7 @@ .client(client).build() } + @Synchronized diff --git a/gradlew b/gradlew index a69d9cb..1aa94a4 100644 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +198,15 @@ done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index f127cfd..93e3f59 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,6 +26,7 @@ set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% diff --git a/henanlibrary/build.gradle b/henanlibrary/build.gradle index 4c26141..08882f7 100644 --- a/henanlibrary/build.gradle +++ b/henanlibrary/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.library' android { namespace 'com.dayu.henanlibrary' - compileSdk 33 - ndkPath 'D:\\android\\sdk\\ndk\\android-ndk-r21' + compileSdk 34 + ndkVersion '21.0.6113669' defaultConfig { minSdk 23 targetSdk 26 diff --git a/henanlibrary/src/main/AndroidManifest.xml b/henanlibrary/src/main/AndroidManifest.xml index 2dd3772..75dc0af 100644 --- a/henanlibrary/src/main/AndroidManifest.xml +++ b/henanlibrary/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.dayu.henanlibrary"> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.NFC" /> <!--鐢ㄤ簬璁块棶缃戠粶锛岀綉缁滃畾浣嶉渶瑕佷笂缃�--> diff --git a/ocridcardlibrary/build.gradle b/ocridcardlibrary/build.gradle index ba76866..5ac1762 100644 --- a/ocridcardlibrary/build.gradle +++ b/ocridcardlibrary/build.gradle @@ -1,7 +1,8 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + namespace 'com.kernal.passportreader.sdk' + compileSdk 34 defaultConfig { minSdkVersion 14 targetSdkVersion 29 diff --git a/pickerviewlibrary/build.gradle b/pickerviewlibrary/build.gradle index 65d44a7..42cbf69 100644 --- a/pickerviewlibrary/build.gradle +++ b/pickerviewlibrary/build.gradle @@ -2,8 +2,8 @@ android { - compileSdkVersion 28 - + compileSdk 34 + namespace 'com.example.pickerviewlibrary' defaultConfig { minSdkVersion 22 targetSdkVersion 28 diff --git a/qihealonelibrary/build.gradle b/qihealonelibrary/build.gradle index b1799a8..dc956ba 100644 --- a/qihealonelibrary/build.gradle +++ b/qihealonelibrary/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.library' android { namespace 'com.dayu.qihealonelibrary' - compileSdk 33 - ndkPath 'D:\\android\\sdk\\ndk\\android-ndk-r21' + compileSdk 34 + ndkVersion '21.0.6113669' defaultConfig { minSdk 23 targetSdk 33 diff --git a/qiheonlinelibrary/build.gradle b/qiheonlinelibrary/build.gradle index 75092a7..5356499 100644 --- a/qiheonlinelibrary/build.gradle +++ b/qiheonlinelibrary/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.android.library' android { namespace 'com.dayu.qiheonlinelibrary' - compileSdk 33 - ndkPath 'D:\\android\\sdk\\ndk\\android-ndk-r21' + compileSdk 34 + ndkVersion '21.0.6113669' defaultConfig { minSdk 23 targetSdk 33 -- Gitblit v1.8.0