Английская версия | Китайская документация
Добавьте меня в WeChat ljx-studio, чтобы присоединиться к группе WeChat (укажите RxHttp)
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. Поддерживает глобальное шифрование/дешифрование, добавление общих параметров и заголовков, кэширование сети, все это можно отдельно настроить для каждого запроса
Кодовое представление, Описание методов 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к байтов.
30-секундное руководство: 30-секундное руководство нового поколения HTTP-запросов RxHttp
Документация Flow: RxHttp + Flow три шага для любого запроса
Документация Await: RxHttp, более элегантный опыт использования корутин, чем Retrofit
Руководство RxJava и основные API: RxHttp, HTTP-запросы, которые удивят вас
Wiki подробная документация: https://github.com/liujingxing/rxhttp/wiki (Эта документация будет постоянно обновляться)
Автоматическое закрытие запросов использует класс RxLife, подробнее см. RxLife библиотека
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 зависимости нажмите здесь
//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"
}
//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"
}
//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"
}
Если вы хотите использовать методы toObservableXxx
для отправки запросов, вам потребуется дополнительная зависимость RxJava
, и указание RxHttp версии RxJava
//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, закрытие запросов при уничтожении страницы
ksp {
arg("rxhttp_rxjava", "3.1.6")
}
kapt {
arguments {
arg("rxhttp_rxjava", "3.1.6")
}
}
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [
//Необходимо передать версию RxJava, которую вы используете
rxhttp_rxjava: '3.1.6',
]
}
}
}
}
//Необязательно, выберите подходящий конвертор в соответствии со своими требованиями, 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"
Если у вас несколько модулей зависят от rxhttp-compiler
(не рекомендуется делать так, обычно достаточно одного базового модуля), то каждый модуль будет генерировать класс RxHttp, и они будут иметь одинаковый путь, что может вызвать конфликты при запуске или сборке проекта. В этом случае вам потребуется указать пакет для классов RxHttp, другими словами, имя пакета для классов RxHttp. Выберите один из способов: ksp/kapt/annotationProcessor
ksp {
arg("rxhttp_package", "rxhttp") //Укажите пакет для классов RxHttp, можно указать любое имя
}
kapt {
arguments {
arg("rxhttp_package", "rxhttp") // Указывает имя пакета классов RxHttp, можно указывать произвольное значение
}
}
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [
rxhttp_package: 'rxhttp' // Указывает имя пакета классов RxHttp, можно указывать произвольное значение
]
}
}
}
}
Наконец, пересоберите проект (этот шаг обязателен), и будут автоматически созданы классы RxHttp.
RxHttp v2.2.8
и выше, нет необходимости добавлять правила обфускации, достаточно сохранить свои Bean-классы от обфускации.RxHttp v2.2.8
и ниже, добавьте правила обфускации RxHttp в свой проект и сохраните свои Bean-классы от обфускации.Для просмотра дополнительных возможностей, скачайте apk здесь
Если это было очень полезно для вас и вы хотите поддержать дальнейшее развитие и поддержку этого библиотеки, то вы можете сделать донат через QR-код ниже. Это будет как пригласить меня выпить кофе или пива. Опенсорс — дело нелёгкое, благодарю за понимание.
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 )