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

OSCHINA-MIRROR/sakaue-QSHttp

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

QSHttp

Описание:

«Открывай и пользуйся»: GET, POST, формы, JSON, загрузка файлов и многое другое — всё это реализуется одной строкой кода!

AIP максимально упрощён: вызов без лишних строк кода, почти нулевые затраты, простота использования.

5 лет практического опыта и итераций для обеспечения стабильности и надёжности.

  • Мощный и гибкий ввод параметров, поддержка универсальных обратных вызовов, простота в использовании.
  • Можно легко реализовать автоматическую загрузку окна, определение состояния бизнеса, отображение сообщений об ошибках.
  • Поддержка нескольких перехватчиков, возможность глобальной настройки общих параметров аутентификации.
  • Асинхронный (обратный вызов в основном потоке) и синхронный запросы.
  • Самоподписанный и двусторонний HTTPS.
  • Возможность настраивать время кэширования, кэширование ошибок (используется при сбое подключения к сети), управление кэшем, автоматическое управление файлами cookie.
  • Подробные обратные вызовы запросов, типы ошибок (сбой сетевого подключения, тайм-аут, отключение от сети, сбой анализа, 404 и т. д.).
  • Подробный журнал посещений для удобства отладки.
  • Низкоуровневая поддержка нативных и okhttp.

Gradle

//build.gradle
allprojects {
    repositories {
        maven {
            url "https://jitpack.io"
        }
    }
}

//app.gradle
dependencies {
    implementation 'com.github.tohodog:QSHttp:1.5.4'
}

Самый простой пример

QSHttp.get("http://xxx").buildAndExecute();

HTTP-отладка доступна по адресу: https://api.reol.top/api_test. Этот интерфейс принимает любые запросы и возвращает информацию о запросах пользователей.

Инициализация фреймворка

    //Инициализируем фреймворк, достаточно вызвать один раз, более подробную конфигурацию см. в разделе #Расширенная конфигурация#
    QSHttp.init(getApplication());

GET

    String url = "https://api.reol.top/api_test";
    //Используем универсальный обратный вызов, автоматически анализируем данные json в модель
    QSHttp.get(url)
            .param("name", "QSHttp")
            .buildAndExecute(new QSHttpCallback<BaseModel<User>>() {
                @Override
                public void onComplete(BaseModel<User> bean) {
                    //Запрос успешно проанализирован, выполняем бизнес-логику, BaseModel — это общий интерфейс модели данных ответа
                }

                //@Override//Необходимо обработать ошибку, можно переопределить
                //public void onFailure(HttpException e) {
                //    e.show();
                //}
            });


    public class BeanModel<M> {
        public int status;
        public String msg;
        public M data;
    }

POST (application/x-www-form-urlencoded)

    String url = "https://api.reol.top/api_test";
    //Использование исходного обратного вызова
    QSHttp.post(url)
            .param("userName", 10086)
            .param("password", "qwe123456")
            .buildAndExecute(new HttpCallback() {
                @Override
                public void onSuccess(ResponseParams response) {
                    response.string();//Ответное содержимое
                }

                @Override
                public void onFailure(HttpException e) {
                    e.show();
                }
            });

POST (application/json)

    String url = "https://api.reol.top/api_test";
    //Для разных типов запросов нужно только изменить имя метода
    QSHttp.postJSON(url)
            .param("userName", "song")
            .param("password", "123456")
            .buildAndExecute(new QSHttpCallback<Bean>() {
                @Override
                public void onComplete(Bean dataBean) {

                }
            });

Download

    //На основе get загрузки
    String url = "https://api.reol.top/api_test";
    QSHttp.download(url,"/sdcard/xxx.txt")
            .buildAndExecute(new HttpCallbackProgress() {
                @Override
                public void onProgress(long var1, long var2, String var3) {
                    long i = var1 * 100 / var2;//Процент загрузки
                }

                @Override
                public void onSuccess(ResponseParams response) {
                    response.file();//Получить каталог
                }

                @Override
                public void onFailure(HttpException e) {
                    e.show();
                }
            });

Upload (multipart/form-data)

    String url = "https://api.reol.top/api_test";
    QSHttp.upload(url)
            //Текстовый параметр
            .param("userName", 10086)
            .param("password", "qwe123456")
            //Файл параметров
            .param("file", new File("xx.jpg"))
            .param("bytes", new byte[1024])//Загрузить массив байтов
            //Указать имя файла для загрузки, параметры content-type
            .multipartBody("icon", "image/*", "icon.jpg", new File("xx.jpg"))
            .multipartBody(new String("icon"), "image/*", "icon2.jpg", new
``` **Реализация автоматического всплывающего окна загрузки и определение состояния бизнес-кода Callback**

В реальных проектах взаимодействие с JSON имеет стандартный формат, например:

{"status":0,"msg":"OK","data":{}}

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

public abstract class MyHttpCallback extends QSHttpCallback { protected boolean isShow = true;

public MyHttpCallback() {
    super();
}

// В Activity/Fragment/view можно не передавать context, будет автоматически получен через отражение
public MyHttpCallback(boolean isShow) {
    this.isShow = isShow;
}

public MyHttpCallback(Activity activity, boolean isShow) {
    super(activity);
    this.isShow = isShow;
}

@Override // Здесь разработчик может изменить ключ и значение по своему усмотрению
public T map(String response) throws HttpException {
    JSONObject jsonObject = JSON.parseObject(response);
    // Сервер вернул неправильный код состояния
    if (jsonObject.getIntValue("status") != 0) {
        throw HttpException.Custom(jsonObject.getString("msg"), jsonObject);
    }
    // Здесь можно продолжить добавление унифицированного кода обработки, например, при неудачном входе в систему

    return parserT(jsonObject.getString("data"));
}


@Override
public void onFailure(HttpException e) {
    if (activity != null) Toast.makeText(activity, e.getPrompt(), Toast.LENGTH_LONG).show();
}

@Override
public void onStart() {
    showProgressDialog(false);
}

@CallSuper
@Override
public void onEnd() {
    dismissProgressDialog();
}


protected ProgressDialog mDialog;

/**
 * Используется для отображения диалога
 */
protected void showProgressDialog(boolean mCancelable) {
    if (isShow && mDialog == null && activity != null && !activity.isFinishing()) {
        mDialog = new ProgressDialog(activity);
        mDialog.setCancelable(mCancelable);
        if (mCancelable) {
            mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialogInterface) {
                }
            });
        }
        mDialog.show();
    }
}

protected void dismissProgressDialog() {
    if (isShow && mDialog != null && activity != null && !activity.isFinishing()) {
        mDialog.dismiss();
        mDialog = null;
    }
}

}


**Расширенные настройки**

// Скрытие классов -keep class * extends org.song.http.** { *; }

// Использование конфигурации для инициализации, глобальные параметры QSHttp.init(QSHttpConfig.Build(getApplication()) // Хост запроса, интеллектуальное составление адреса запроса .baseUrl("http://reol.top/api")

    // Настройка сайтов, требующих подписи, чтение assets/cers папки .cer сертификатов
    // Поддержка двусторонней аутентификации, просто поместите xxx.bks, см. demo
    .ssl(Utils.getAssetsSocketFactory(this, "cers", "password")
            , "192.168.1.168") // Параметр host: установить хост, требующий самоподписанного сертификата, если не установлено, то можно получить доступ только к https сайтам из списка сертификатов в .cer
    .hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier()) // Правила доверия сертификату (полное доверие)

    .cacheSize(128 * 1024 * 1024)
    .connectTimeout(18 * 1000)
    .debug(true) // Печать журнала

    // Перехватчик, добавление глобальных заголовков параметров, аутентификация
    .interceptor(interceptor)
    .build());

// Перехватчик static Interceptor interceptor = new Interceptor() { @Override public ResponseParams intercept(Chain chain) throws HttpException { RequestParams r = chain.request() .newBuild() .header("Interceptor", "Interceptor") // Глобальный заголовок параметра // Продолжить добавление и изменение других .build();


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

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

Введение

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

Обновления (1)

все

Участники

все

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

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