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

OSCHINA-MIRROR/mirrors-xutils

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

xUtils3: краткое введение

xUtils включает в себя orm, http(s), image, view аннотации, но всё ещё остаётся лёгким (251K) и мощным, удобным для расширения.

1. orm: эффективный и стабильный инструмент orm, который делает поддержку cookie и кэширования более удобной при реализации http-интерфейсов.

  • Гибкий интерфейс, похожий на выражение linq.
  • Производительность аналогична greenDao.

2. http(s): основан на UrlConnection, после Android4.4 нижний уровень — okHttp.

  • Поддержка 11 видов глаголов запроса: GET, POST, PUT, PATCH, HEAD, MOVE, COPY, DELETE, OPTIONS, TRACE, CONNECT.
  • Поддерживает загрузку больших файлов (более 2 ГБ).
  • Поддерживает прерывистую загрузку (если сервер поддерживает параметр Range, клиент автоматически обрабатывает прерывистую загрузку).
  • Поддерживает файлы cookie (реализует характеристики домена, пути, срока действия).
  • Поддерживает кэширование (реализует такие характеристики, как Cache-Control, Last-Modified, ETag, использует двойной механизм очистки LRU при переполнении кэша).
  • Поддерживает асинхронные и синхронные вызовы (можно комбинировать с RxJava).

3. image: благодаря поддержке загрузки и кэширования http(s) модуль image реализован довольно просто.

  • Поддерживает кэш памяти, кэш диска (миниатюры и исходные изображения), а также поддерживает восстановление изображений, которые были удалены из MemCache, чтобы уменьшить мерцание при возврате страницы.
  • При прокрутке ListView автоматически останавливает задачу загрузки, связанную с элементом, который был повторно использован (при повторной загрузке используется непрерывная передача).
  • Поддерживает webp, gif (некоторые старые системы отображают только статические изображения).
  • Поддерживает обрезку углов, кругов и квадратов, а также автоматическое вращение...

4. view аннотации: модуль view аннотаций содержит всего около 400 строк кода, но он гибкий и поддерживает различные виды внедрения и привязки событий к представлениям.

  • Аннотации событий поддерживают и не подвержены влиянию запутывания... (см. конфигурацию запутывания).
  • Поддерживают привязку слушателей с несколькими методами.

Использование Gradle для сборки: добавьте следующую зависимость:

implementation 'org.xutils:xutils:3.9.0'

Пример конфигурации запутывания: вы можете скачать aar файл здесь: http://dl.bintray.com/wyouflf/maven/org/xutils/xutils/.

Часто задаваемые вопросы:

  1. Как лучше управлять кэшем изображений? https://github.com/wyouflf/xUtils3/issues/149.
  2. Как использовать файлы cookie? https://github.com/wyouflf/xUtils3/issues/125.
  3. Что такое запрос с параметром «?»? Запрос может передавать параметры через заголовок, URL или тело запроса; параметры запроса — это параметры после вопросительного знака (?) в URL.
  4. Что такое тело запроса? Тело запроса поддерживается только для PUT, POST, PATCH и DELETE (в старом RFC2616 документе не указано явно, поддерживается ли оно, поэтому временно поддерживается).
  5. Как настроить пользовательский объект параметров HTTP и анализ результатов? https://github.com/wyouflf/xUtils3/issues/191.
  6. Я установил время ожидания HTTP равным 5 секундам, но иногда ожидание занимает около 15 секунд. Это связано с тем, что по умолчанию запрос будет повторяться дважды после сбоя, и вы можете предотвратить автоматический повтор запроса, установив setMaxRetryCount(0).
  7. Аннотация @Event: если событие одного и того же идентификатора подкласса перекрывает событие родительского класса, то onClickListener и onItemClickListener по умолчанию блокируют двойное нажатие, которое не часто используется на мобильных устройствах, но если вам нужно поддерживать двойное нажатие, вы можете установить setOnClickListener самостоятельно.

Предварительная настройка

Необходимые разрешения
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- Необязательно -->
Инициализация
// В методе onCreate приложения инициализируйте
@Override
public void onCreate() {
    super.onCreate();
    x.Ext.init(this);
    x.Ext.setDebug(BuildConfig.DEBUG); // Включить или отключить вывод отладочных сообщений, включение отладки влияет на производительность.
    ...
}

Использование аннотаций событий (@ContentView, @ViewInject и другие примеры см. в sample проекте)

/**
 * 1. Метод должен быть закрытым.
 * 2. Форма параметра метода должна соответствовать типу интерфейса Listener.
 * 3. Параметр аннотации value поддерживает массив: value={id1, id2, id3}
 * 4. Другие параметры см. в описании класса {@link org.xutils.event.annotation.Event}.
 **/
@Event(value = R.id.btn_test1,
        type = View.OnClickListener.class/*Необязательный параметр, по умолчанию View.OnClickListener.class*/)
private void onTest1Click(View view) {
...
}

Использование базы данных (дополнительные примеры см. в sample проекте)

Parent test = db.selector(Parent.class)
                    .where("id", "in", new int[]{1, 3, 6})
                    .or("age", "<", 29)
                    .findFirst();
long count = db.selector(Parent.class)
                    .where("name", "LIKE", "w%")
                    .and("age", ">", 32)
                    .count();
List<Parent> testList = db.selector(Parent.class)
                    .where("id", "between", new String[]{"1", "5"})
                    .findAll();
List<DbModel> list = db.selector(Child.class)
                    .where("age", "<", 18)
                    .groupBy("parentId")
                    .having(WhereBuilder.b("COUNT(parentId)", ">", 1))
                    .select("parentId, COUNT(parentId) as childNum")
                    .findAll();

Доступ к сети (дополнительные примеры см. в sample проекте)

Если вам нужен простой сетевой запрос:

@Event(value = R.id.btn_test2)
private void onTest2Click(View view) {
    RequestParams params = new RequestParams("https://www.baidu.com/s");
    // params.setSslSocketFactory(...); // Если требуется настроить SSL
    params.addQueryStringParameter("wd", "xUtils");
    x.http().get(params, new Callback.CommonCallback<String>() {
        @Override
        public void onSuccess(String result) {
            Toast.makeText(x.app(), result, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(Throwable ex, boolean isOnCallback) {
            Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancelled(CancelledException cex) {
            Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show();
        } **Определение основного языка текста запроса**

Данный текст написан на языке Java.

**Перевод текста на русский язык**

max-age или expires определяют, будет ли использоваться локальный кэш в методе onCache. // Если сервер не возвращает max-age или expires, то кэш будет сохраняться, пока здесь не будет определена логика возврата false, тогда xUtils запросит новые данные, чтобы заменить их. // // * Если доверять этому кэшу, возвращать true, то больше не будет запрашиваться сеть; // возвращать false — продолжать запрашивать сеть, но в заголовке запроса будут добавлены ETag, Last-Modified и т. д., // если сервер вернёт 304, это означает, что данные не обновлены, загрузка данных не продолжается. // this.result = result; return false; // true: доверять данным кэша, не инициировать сетевой запрос; false: не доверять данным кэша. }

@Override public void onSuccess(JsonDemoResponse result) { // Внимание: если сервер возвращает 304 или onCache выбрал доверие к кэшу, в этот момент result равен null. if (result != null) { this.result = result; } }

@Override public void onError(Throwable ex, boolean isOnCallback) { hasError = true; Toast.makeText(x.app(), ex.getMessage(), Toast.LENGTH_LONG).show(); if (ex instanceof HttpException) { // сетевая ошибка HttpException httpEx = (HttpException) ex; int responseCode = httpEx.getCode(); String responseMsg = httpEx.getMessage(); String errorResult = httpEx.getResult(); // ... } else { // другие ошибки // ... } }

@Override public void onCancelled(CancelledException cex) { Toast.makeText(x.app(), "cancelled", Toast.LENGTH_LONG).show(); }

@Override public void onFinished() { if (!hasError && result != null) { // Успешное получение данных Toast.makeText(x.app(), result, Toast.LENGTH_LONG).show(); } });


### Привязка изображения (дополнительные примеры см. в sample проекте)

```java
x.image().bind(imageView, url, imageOptions);

// assets file
x.image().bind(imageView, "assets://test.gif", imageOptions);

// resources file
x.image().bind(imageView, "res://" + R.minimap.test, imageOptions);

// local file
x.image().bind(imageView, new File("/sdcard/test.gif").toURI().toString(), imageOptions);
x.image().bind(imageView, "/sdcard/test.gif", imageOptions);
x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions);
x.image().bind(imageView, "file:/sdcard/test.gif", imageOptions);

x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
// Используется для получения файла из кэша
x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...});

Об авторе

  • Email: wyouflf@qq.com, wyouflf@gmail.com
  • Любые предложения или проблемы, возникшие при использовании, можно отправить мне по электронной почте. Вы также можете присоединиться к группе QQ: 330445659 (уже заполнена), 275967695, 257323060, 384426013, 176778777, 169852490, 261053948, 330108003. Технические обсуждения, обмен идеями _

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

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

Введение

xUtils содержит ORM, HTTP(S), Image, View аннотации, но всё ещё имеет небольшой размер (246 КБ), а также мощные функции и удобную расширяемость. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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