allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }
}
}
implementation 'com.gitee.ice_king:iceframework:1.0.8'
IceApplication.statusBarColor=0xff000000.toInt()//установка глобального цвета строки состояния
IceApplication.init(this)
BaseActivity.activityTasks
fun getHtmlData(htmlBody: String?): String
binding.textView
binding.textView
toastMsg.value=""
showProgressBar.value=true
adapter.list=arrayListOf()
adapter.selectPosition
adapter.selectPositions
adapter.onItemClickListener={}
viewHolder.binding.textView.text=""
http = Http.config(baseUrl){
val headers=HashMap<String,String>()
return@config headers
}
class ApiResponse<T>(
var data: T?,
var code: Int,
var msg: String
)
@GET("demo/demo")
suspend fun test(): ApiResponse<Any>
suspend fun <T> BaseViewModel.call(isBackground:Boolean=false, job:suspend ()->T):T{
if(!isBackground){
this.showProgressBar.value=true
}
var apiResponse: ApiResponse<*>?=null
if(!NetworkUtils.isConnected()){
apiResponse=ApiResponse(null,201,"текущая сеть не подключена")
}
withContext(Dispatchers.IO){
if(!NetworkUtils.isAvailable()){
apiResponse=ApiResponse(null,201,"сетевое соединение недоступно")
}
}
if(apiResponse!=null){
if(!isBackground){
this.showProgressBar.value=false
}
return apiResponse as T
}
try {
val res=job()
if(res is ApiResponse<*>){
apiResponse=res
if(apiResponse!!.code==401){
apiResponse!!.msg="пожалуйста, войдите"
App.needLogin()
}
if(apiResponse!!.code==402){
apiResponse!!.msg="состояние входа истекло, пожалуйста, повторно войдите"
App.needLogin()
}
}else{
apiResponse=ApiResponse(null,201,"ошибка сервера")
}
}catch (e:Exception){
e.printStackTrace()
//обработка исключений, это случайный пример, который можно обернуть в инструмент для инкапсуляции
val msg = when (e) {
is SocketTimeoutException -> "time out"
is HttpException -> {
when (e.code()) {
404 -> "не удалось найти подходящие ресурсы"
500 -> "внутренняя ошибка сервера"
else -> e.message()
}
}
is JsonSyntaxException -> "исключение синтаксического анализа json"
is UnknownHostException -> "аномалия сети"
else -> e.message
}
this.toastMsg.value=msg!!
apiResponse=ApiResponse(null,201, msg)
}
if(!isBackground){
this.showProgressBar.value=false
}
return apiResponse as T
}
private val api = App.http.instance<Api>()
viewModelScope.launch {
val res=call {
api.test()
}
}
RetrofitUtils.file2MultiPartBody(file)
fun ImageView.load(context:Context,url:String){
...
}
fun ImageView.loadBlur(context:Context, url:String){
...
}
fun Date.format(format:String):String{
...
}
``` **3. Предотвращение последовательных кликов**
```kotlin
fun View.setOnNotDoubleClickListener(block:(v:View)->Unit){
...
}
6. Инструменты
1. AppInfoUtils (информация о приложении)
//версия
fun packageCode(context: Context):Int{
...
}
//название версии
fun packageName(context: Context):String{
...
}
2. CacheUtil (кэш)
//размер кэша, возвращает размер после форматирования
fun getTotalCacheSize(context: Context): String {
...
}
//очистка всего кэша
fun clearAllCache(context: Context) {
...
}
3. MobileCodeUtils (код подтверждения)
//старт обратного отсчёта
fun countDown(lifecycleScope:LifecycleCoroutineScope, tv: TextView) {
...
}
4. PermissionUtil (разрешения)
fun requestPermissions(permission:Array<String>,success:()->Unit,fail:()->Unit){
...
}
7. Встроенные сторонние библиотеки
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )