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

OSCHINA-MIRROR/327744707-okhttp-RxHttp

Клонировать/Скачать
README_zh.md 20 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 27.02.2025 05:26 3536873

RxHttp

Английская версия | Китайская документация

JitPack API Изменения Часто задаваемые вопросы 掘金

(RxHttp 3.0 Обновление руководства, обязательно при обновлении)

Добавьте меня в WeChat ljx-studio, чтобы присоединиться к группе WeChat (укажите RxHttp)

1. Основные преимущества

1. Учиться можно за 30 секунд, стоимость обучения минимальна

2. Самый элегантный способ поддержки Kotlin корутин

3. Самый элегантный способ управления несколькими базовыми URL и динамическими URL

4. Самый элегантный способ единого обработки ошибок, не нарушая Lambda выражений

5. Самый элегантный способ работы с загрузками/скачиванием/перезапуском скачивания/отслеживанием прогресса, уже адаптирован для Android 10

6. Поддерживает Gson, Xml, ProtoBuf, FastJson и другие инструменты анализа данных сторонних производителей

7. Поддерживает Get, Post, Put, Delete и любой другой метод запроса, который можно настроить

8. Поддерживает отправку запросов автоматически закрываться в Activity/Fragment/View/ViewModel/любом классе

9. Поддерживает глобальное шифрование/дешифрование, добавление общих параметров и заголовков, кэширование сети, все это можно отдельно настроить для каждого запроса

2. Три шага для выполнения запроса

Кодовое представление, Описание методов toObservableXxx, toAwaitXxx, toFlowXxx здесь

Await Flow RxJava (Kotlin) RxJava (Java)
Синхронный стиль записи val user = RxHttp.get("/server/..").add("key", "value").toAwait<User>().await() RxHttp.get("/server/..").add("key", "value").toFlow<User>().catch { }.collect {} RxHttp.get("/server/..").add("key", "value").toObservable<User>().subscribe({}, {}) RxHttp.get("/server/..").add("key", "value").toObservable(User.class).subscribe(user -> {}, throwable -> {})
Обратный вызов RxHttp.get("/server/..").add("key", "value").toAwait<User>().awaitResult {}.onFailure {} RxHttp.get("/server/..").add("key", "value").toFlow<User>().catch {}.collect {} RxHttp.get("/server/..").add("key", "value").toObservable<User>().subscribe({}, {}) RxHttp.get("/server/..").add("key", "value").toObservable(User.class).subscribe(user -> {}, throwable -> {})

Сравнение RxHttp и Retrofit

Функциональность RxHttp Retrofit
Версия v3.2.6 v2.9.0
Статус В разработке В разработке
Стандарт RESTful стилистика
Стоимость обучения Низкая Высокая
Расширяемость Высокая Высокая
Размер исходного кода 73к 75к
Размер JAR файла 210к 123к
RxJava RxJava ❌
RxJava2✅
RxJava3✅
RxJava ✅
RxJava2✅
RxJava3✅
Kotlin корутины
Flow потоки
Конверторы Gson✅
Jackson✅
fastJson✅
Moshi✅
Protobuf✅
simplexml✅
kotlinx.serialization✅
Пользовательский✅
Gson✅
Jackson✅
fastJson✅
Moshi✅
Protobuf✅
simplexml✅
kotlinx.serialization✅
Пользовательский✅
Закрытие запросов Ручное✅
Автоматическое✅
Массовое✅
Ручное✅
Автоматическое✅
Массовое✅
Загрузка/скачивание/отслеживание прогресса ❌ требуется повторная обработка
Android 10 разделенная система хранения ❌ требуется повторная обработка
Общие параметры ❌ требуется повторная обработка
Многие домены/динамические домены ✅ удобно ✅ обычно
Логирование
Форматирование JSON данных ❌ требуется повторная обработка
Единое определение бизнес кода ❌ требуется повторная обработка
Кэширование запросов ❌ требуется повторная обработка
Глобальное шифрование/дешифрование ❌ требуется повторная обработка
Отдельное дешифрование полей ❌ требуется повторная обработка

Примечание

Вы можете задуматься, почему RxHttp размер исходного кода всего на 6к больше чем у Retrofit, а размер JAR файла почти вдвое больше? Избыток функций приводящий к увеличению объема кода? Нет, это связано с использованием Kotlin внутри RxHttp, где для поддержки Await/Flow, используются множество внутренних методов и расширений Kotlin, которые после компиляции становятся значительно большими. Например, файлы AwaitTransform.kt, CallFactoryToAwait.kt, CallFactoryToFlow.kt после компиляции занимают около 70к байтов.

3. Дополнительные документы

30-секундное руководство: 30-секундное руководство нового поколения HTTP-запросов RxHttp

Документация Flow: RxHttp + Flow три шага для любого запроса

Документация Await: RxHttp, более элегантный опыт использования корутин, чем Retrofit

Руководство RxJava и основные API: RxHttp, HTTP-запросы, которые удивят вас

Wiki подробная документация: https://github.com/liujingxing/rxhttp/wiki (Эта документация будет постоянно обновляться)

(RxHttp 3.0 Обновление руководства, обязательно при обновлении)

Автоматическое закрытие запросов использует класс RxLife, подробнее см. RxLife библиотека

4. Подготовка к использованию

1. RxHttp зависимости есть три варианта, выберите один из них, ksp, kapt, annotationProcessor как выбрать нажмите здесь

2. asXxx методы внутри реализованы через RxJava, если вы хотите использовать их, вам потребуется дополнительная зависимость RxJava и указание RxHttp версии RxJava

3. RxHttp уже адаптирован для OkHttp 3.12.0 - v4.12.0 версий (4.3.0 кроме), если вам нужна совместимость с API ниже 21, используйте зависимость OkHttp 3.12.x, этот вариант требует минимум API 9

4. Maven зависимости нажмите здесь

4.1. Обязательные

Зависимости annotationProcessor
//1. Проект build.gradle файл
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}
//2. Java 8 или выше
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
//3. Добавьте зависимости
dependencies {
    def rxhttp_version = '3.3.1'
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'  
    implementation "com.github.liujingxing.rxhttp:rxhttp:$rxhttp_version"
    annotationProcessor "com.github.liujingxing.rxhttp:rxhttp-compiler:$rxhttp_version"
}
Зависимости kapt
//1. Проект build.gradle файл
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}
//2. Java 8 или выше
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
//3. Добавьте плагины и зависимости
plugins {
    id 'kotlin-kapt'
}
 
dependencies {
    def rxhttp_version = '3.3.1'
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'  
    implementation "com.github.liujingxing.rxhttp:rxhttp:$rxhttp_version"
    kapt "com.github.liujingxing.rxhttp:rxhttp-compiler:$rxhttp_version"
}
Зависимости ksp
//1. Проект build.gradle файл
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}
//2. Java 8 или выше, и конфигурация sourceSets
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
//3. Добавьте плагины и зависимости
plugins {
    id 'com.google.devtools.ksp' version '2.0.0-1.0.24'
}
 
dependencies {
    def rxhttp_version = '3.3.1'
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'  
    implementation "com.github.liujingxing.rxhttp:rxhttp:$rxhttp_version"
    ksp "com.github.liujingxing.rxhttp:rxhttp-compiler:$rxhttp_version"
}

4.2. Необходимые зависимости

4.2.1. Настройка RxJava

Если вы хотите использовать методы toObservableXxx для отправки запросов, вам потребуется дополнительная зависимость RxJava, и указание RxHttp версии RxJava

  • Зависимость RxJava, RxJava2/RxJava3 выбираете одну
//RxJava3 
implementation 'io.reactivex.rxjava3:rxjava:3.1.6'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.2'
implementation 'com.github.liujingxing.rxlife:rxlife-rxjava3:2.2.2' //Управление жизненным циклом RxJava3, закрытие запросов при уничтожении страницы

//RxJava2
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.github.liujingxing.rxlife:rxlife-rxjava2:2.2.2' //Управление жизненным циклом RxJava2, закрытие запросов при уничтожении страницы
  • Передача версии RxJava через ksp/kapt/annotationProcessor, выберите один из этих способов
Передача версии RxJava через ksp
ksp {
    arg("rxhttp_rxjava", "3.1.6")
}
Передача версии RxJava через kapt
kapt {
    arguments {
        arg("rxhttp_rxjava", "3.1.6")
    }
}
Передача версии RxJava через annotationProcessor
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                    //Необходимо передать версию RxJava, которую вы используете
                    rxhttp_rxjava: '3.1.6', 
                ]
            }
        }
    }
}

4.2.2. Настройка конверторов

//Необязательно, выберите подходящий конвертор в соответствии со своими требованиями, RxHttp по умолчанию использует GsonConverter
implementation "com.github.liujingxing.rxhttp:converter-serialization:$rxhttp_version"
implementation "com.github.liujingxing.rxhttp:converter-fastjson:$rxhttp_version"
implementation "com.github.liujingxing.rxhttp:converter-jackson:$rxhttp_version"
implementation "com.github.liujingxing.rxhttp:converter-moshi:$rxhttp_version"
implementation "com.github.liujingxing.rxhttp:converter-protobuf:$rxhttp_version"
implementation "com.github.liujingxing.rxhttp:converter-simplexml:$rxhttp_version"

4.2.3. Указание пакета для классов RxHttp

Если у вас несколько модулей зависят от rxhttp-compiler (не рекомендуется делать так, обычно достаточно одного базового модуля), то каждый модуль будет генерировать класс RxHttp, и они будут иметь одинаковый путь, что может вызвать конфликты при запуске или сборке проекта. В этом случае вам потребуется указать пакет для классов RxHttp, другими словами, имя пакета для классов RxHttp. Выберите один из способов: ksp/kapt/annotationProcessor

Указание пакета для классов RxHttp через ksp
ksp {
    arg("rxhttp_package", "rxhttp")  //Укажите пакет для классов RxHttp, можно указать любое имя 
}
Укажите имя пакета с помощью kapt для связанных классов RxHttp
kapt {
    arguments {
        arg("rxhttp_package", "rxhttp")  // Указывает имя пакета классов RxHttp, можно указывать произвольное значение
    }
}
Укажите имя пакета с помощью javaCompileOptions для связанных классов RxHttp
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                    rxhttp_package: 'rxhttp'  // Указывает имя пакета классов RxHttp, можно указывать произвольное значение
                ]
            }
        }
    }
}

Наконец, пересоберите проект (этот шаг обязателен), и будут автоматически созданы классы RxHttp.

5. Обфускация

  • Для версий RxHttp v2.2.8 и выше, нет необходимости добавлять правила обфускации, достаточно сохранить свои Bean-классы от обфускации.
  • Для версий RxHttp v2.2.8 и ниже, добавьте правила обфускации RxHttp в свой проект и сохраните свои Bean-классы от обфускации.

6. Пример работы

Для просмотра дополнительных возможностей, скачайте apk здесь

7. Донаты

Если это было очень полезно для вас и вы хотите поддержать дальнейшее развитие и поддержку этого библиотеки, то вы можете сделать донат через QR-код ниже. Это будет как пригласить меня выпить кофе или пива. Опенсорс — дело нелёгкое, благодарю за понимание.

donations.png

Лицензия

Copyright 2019 liujingxing

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/327744707-okhttp-RxHttp.git
git@api.gitlife.ru:oschina-mirror/327744707-okhttp-RxHttp.git
oschina-mirror
327744707-okhttp-RxHttp
327744707-okhttp-RxHttp
master