1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ice_king-ice-framework

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

IceFramework

Gitee адрес, спасибо за star

Это MVVM фреймворк на Kotlin, ViewModel, Retrofit+корутины, ViewBinding

1. Добавление зависимостей

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'  

2. Инициализация в application

IceApplication.statusBarColor=0xff000000.toInt()//установка глобального цвета строки состояния  
IceApplication.init(this)  

3. Введение в базовый класс

BaseActivity, BaseFragment, BaseViewModel, BaseRecyclerAdapter

1. BaseActivity

Получение стека страниц

BaseActivity.activityTasks  

Обработка текста с форматированием, где ширина изображения равна 100%

fun getHtmlData(htmlBody: String?): String  

По умолчанию обрабатывается скрытие клавиатуры при нажатии вне поля ввода

Получить объект View, используя viewBinding, например

binding.textView  

2. BaseFragment

Получить объект View, используя viewBinding, например

binding.textView  

3. BaseViewModel

Отображение ошибки

toastMsg.value=""  

Показать индикатор загрузки

showProgressBar.value=true  

4. BaseRecyclerAdapter

Установить данные

adapter.list=arrayListOf()  

Нажать на индекс

adapter.selectPosition  

Несколько нажатых индексов

adapter.selectPositions  

Событие клика

adapter.onItemClickListener={}  

Изменить представление

viewHolder.binding.textView.text=""  

4. Использование сетевых запросов

1. Инициализация

http = Http.config(baseUrl){  
    val headers=HashMap<String,String>()  
    return@config headers  
}  

2. Объявление интерфейса API, создание файла Api Interface и написание кода

Я использую код ApiResponse следующим образом:

class ApiResponse<T>(  
        var data: T?,  
        var code: Int,  
        var msg: String  
)  
@GET("demo/demo")  
suspend fun test(): ApiResponse<Any>  

3. Вызов запроса в viewmodel

Чтобы избежать сбоя сетевого запроса, рекомендуется расширить BaseViewModel. Код выглядит следующим образом:

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()  
    }  
}  

4. Запрос параметров компонента

RetrofitUtils.file2MultiPartBody(file)  

5. Расширенные функции

1. Загрузка изображений

fun ImageView.load(context:Context,url:String){  
    ...  
}  

fun ImageView.loadBlur(context:Context, url:String){  
    ...  
}  

2. Преобразование даты и строк

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. Встроенные сторонние библиотеки

  1. EventBus, уже зарегистрирован в Activity и Fragment по умолчанию.
  2. Управление строкой состояния: StatusBarUtil.
  3. Библиотека инструментов AndroidUtilCode.
  4. Выбор галереи PictureSelector.
  5. Галерея изображений io.github.youth5201314:banner.
  6. Загрузка изображений Glide.
  7. Компонент переключения com.github.zcweng:switch-button.
  8. Инструмент ведения журнала com.orhanobut:logger, инициализирован по умолчанию.
  9. Компонент колеса выбора Android-PickerView.
  10. Макет flexbox com.google.android:flexbox.
  11. WebView DSBridge-Android:x5.
  12. SmartRefreshLayout для обновления с прокруткой.
  13. Компонент календаря com.haibin:calendarview.
  14. Поле ввода пароля com.github.WGwangguan:SeparatedEditText.
  15. Инструменты JSON fastjson и Gson.
  16. ImageView с закруглёнными углами com.makeramen:roundedimageview.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это MVVM-фреймворк, основанный на Kotlin, ViewModel, Retrofit + корутинах и ViewBinding. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/ice_king-ice-framework.git
git@api.gitlife.ru:oschina-mirror/ice_king-ice-framework.git
oschina-mirror
ice_king-ice-framework
ice_king-ice-framework
master