QSHttp
Описание:
«Открывай и пользуйся»: GET, POST, формы, JSON, загрузка файлов и многое другое — всё это реализуется одной строкой кода!
AIP максимально упрощён: вызов без лишних строк кода, почти нулевые затраты, простота использования.
5 лет практического опыта и итераций для обеспечения стабильности и надёжности.
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 )