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

OSCHINA-MIRROR/HarmonyOS-tpc-LoadSir

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

LoadSir

LoadSir — это эффективный, удобный в использовании, экологичный и легко расширяемый менеджер страниц отклика на загрузку. Он позволяет переключаться между состояниями страниц при загрузке данных с сети или других источников данных. Можно добавлять пользовательские страницы состояний, такие как "Загрузка", "Ошибка загрузки", "Нет данных", "Превышено время ожидания" и другие часто используемые страницы. LoadSir может работать вместе с сетевыми загрузочными фреймворками, автоматически переключаясь между страницами состояний в зависимости от кода ответа, ошибки или данных.

Сценарии использования

в Ability в Component

Интеграция

Вариант 1

Добавьте артефакты HAR в папку lib.
Добавьте следующий код в gradle файл entry.
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])

Вариант 2

implementation project(':library')

Вариант 3

implementation 'io.openharmony.tpc.thirdlib:LoadSir:1.0.2'
```Функционал и особенности LoadSir
 ---
 * :star: Поддерживает Ability, Component
 * :star: Использует шаблоны для преобразования входных сигналов и выходных состояний, что позволяет автоматически адаптировать страницы состояний в зависимости от кода ответа или данных, обеспечивая глобальное автоматическое переключение состояний
 * :star: Не требует изменения файлов макета
 * :star: Загружает только одну страницу состояния, не предварительно загружая все страницы
 * :star: Не требуется установление значений состояний через перечисления или константы; можно использовать тип класса состояния (xxx.class) в качестве кода состояния
 * :star: Возможность установки событий нажатия для каждой отдельной страницы состояния, где возвращаемое значение boolean может заменять или дополнять OnReloadListener, например, переход на страницу настроек при сетевой ошибке
 * :star: Отсутствие предопределённых страниц, что снижает связывание и предоставляет разработчику свободу в конфигурации
 * :star: Возможность сохранения строки заголовков (Toolbar, title Component)
 * Возможность установки события перезагрузки (OnReloadListener)
 * Возможность создания пользовательских страниц состояний (наследование Callback класса)
 * Возможность переключения состояний прямо из потока выполнения
 * Возможность установки начальной страницы состояния (например, прогрессбар используется как начальная страница)* Возможность расширения страниц состояний за счет добавления пользовательских страниц в конфигурацию
 * Возможность глобального единого конфигурирования или отдельного конфигурирования каждого компонентаНачало работы с LoadSir
---

Использование LoadSir требует всего трёх шагов.


### Шаг 1: Конфигурирование

#### Глобальный способ конфигурирования
Глобальный способ конфигурирования использует паттерн Singleton, то есть полученные конфигурации будут одинаковыми для всех. Конфигурация может быть добавлена в Application, где можно добавить страницы состояний и установить дефолтную страницу состояния.```java
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        LoadSir.beginBuilder()
                .addCallback(new ErrorCallback()) // Добавление различных состояний страниц
                .addCallback(new EmptyCallback())
                .addCallback(new LoadingCallback())
                .addCallback(new TimeoutCallback())
                .addCallback(new CustomCallback())
                .setDefaultCallback(LoadingCallback.class) // Установка по умолчанию состояния страницы
                .commit();
    }
}
Отдельная конфигурация

Если вы хотите сохранить глобальную конфигурацию, но при этом внести некоторые изменения для определённой страницы, можно использовать этот метод.### Второй шаг: регистрация

В Ability

@Override
public void onStart(Intent intent) {
    super.onStart(intent);
    setUIContent(ResourceTable.Layout_ability_normal);
    loadService = LoadSir.getDefault().register(findComponentById(ResourceTable.Id_container), (Callback.OnReloadListener) v -> {

    });
}

В Component```java

@Override public void onStart(Intent intent) { super.onStart(intent); setUIContent(ResourceTable.Layout_layout_component); Image imageView = (Image) findComponentById(ResourceTable.Id_iv_img); LoadSir loadSir = new LoadSir.Builder() .addCallback(new TimeoutCallback()) .addCallback(new LoadingCallback()) .setDefaultCallback(LoadingCallback.class) .build(); loadService = loadSir.register(imageView, (Callback.OnReloadListener) v -> { loadService.showCallback(LoadingCallback.class); createParallelTaskDispatcher("123", TaskPriority.DEFAULT).delayDispatch((Runnable) () -> { @Override public void run() { Log.d("1-" + Thread.currentThread().getName()); handler2.sendEvent(0); } }, 5000); }); }

}

Третий шаг: обратные вызовы

Прямой обратный вызов

protected void loadNet() {
    // Выполняется сетевой запрос...
    // Выполняется обратный вызов
    loadService.showSuccess(); // Успешный обратный вызов
    loadService.showCallback(EmptyCallback.class); // Другие обратные вызовы
}

Обратный вызов с использованием конвертера (рекомендовано)Если вы не хотите каждый раз выполнять обратный вызов вручную, можно использовать конвертер при регистрации, чтобы адаптироваться к соответствующей странице состояния в зависимости от полученных данных.```java

LoadService loadService = LoadSir.getDefault().register(this, new Callback.OnReloadListener() { @Override public void onReload(Component v) { // логика повторной загрузки }}, new Convertor() { @Override public Class<? extends Callback> map(HttpResult httpResult) { Class<? extends Callback> resultCode = SuccessCallback.class; switch (httpResult.getResultCode()) { case SUCCESS_CODE:// успешный вызов обратного вызова if (httpResult.getData().size() == 0) { resultCode = EmptyCallback.class; } else { resultCode = SuccessCallback.class; } break; case ERROR_CODE: resultCode = ErrorCallback.class; break; } return resultCode; } });

Обратный вызов передается с указанием конвертора и конкретного типа данных.
```java
loadService.showWithConvertor(httpResult);

Создание пользовательских callback страниц

LoadSir для полной декуплированности не предполагает никаких состояний по умолчанию, поэтому вам потребуется самостоятельно реализовать свои callback страницы, такие как "Загрузка", "Нет данных", "Ошибка", "Превышено время ожидания" и другие часто используемые страницы, установите макет и создайте логику нажатия.```java public class CustomCallback extends Callback {

// Устанавливаем макет
@Override
protected int onCreateView() {
    return R.layout.layout_custom;
}

// Обработка события нажатия текущего callback, если возвращается true, то заменяет событие onReload(), если false, то выполняются оба события, сначала onReloadEvent().
@Override
protected boolean onReloadEvent(final Context context, Component view) {
    (view.findComponentById(ResourceTable.Id_iv_gift)).setClickedListener(new Component.ClickedListener() {
        @Override
        public void onClick(Component component) {

        }
    });
    return true;
}

// Возвращает true, чтобы отображать исходное изображение (SuccessView) при отображении callback страницы, и false, чтобы скрывать его.
@Override
public boolean getSuccessVisible() {
    return super.getSuccessVisible();
}

// Вызывается при добавлении callback к текущему виду, Component - это компонент макета текущего callback.
@Override
public void onAttach(Context context, Component view) {
    super.onAttach(context, view);
}

// Вызывается при удалении callback из текущего вида, Component - это компонент макета текущего callback.
@Override
public void onDetach() {
    super.onDetach(context, view);
}

}


### Динамическое изменение callback

```java
loadService = LoadSir.getDefault().register(...);
loadService.setCallBack(EmptyCallback.class, new Transport() {
   @Override
   public void order(Context context, Component view) {
       Text mTvEmpty = (Text) view.findComponentById(ResourceTable.Id_tv_empty);
       mTvEmpty.setText("Хорошо, нет данных. Вам следует заполнить это!");
   }
});

Встроенные callback страницы LoadSir

ProgressCallback loadingCallback = new ProgressCallback.Builder()
        .setTitle("Загрузка", R.style.Hint_Title)
        .build();
```HintCallback hintCallback = new HintCallback.Builder()
        .setTitle("Ошибка", R.style.Hint_Title)
        .setSubTitle("Извините, друг, я попробую ещё раз.")
        .setHintImg(R.drawable.error)
        .build();
```Загрузите объект LoadSir следующим образом:

```java
LoadSir loadSir = new LoadSir.Builder()
        .addCallback(loadingCallback)
        .addCallback(hintCallback)
        .setDefaultCallback(ProgressCallback.class)
        .build();

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

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

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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