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

OSCHINA-MIRROR/huanghaibin_dev-harmony-http-client

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

HarmonyHttpClient

Введение

Harmony — это используемая на платформе Harmony сетевая структура Http, которая включает в себя реализацию HttpNet на чистом Java. Она похожа на okhttp и поддерживает синхронные и асинхронные запросы. Также существует версия Harmony Retrofit, аналогичная версии для Android. Она позволяет использовать аннотации и автоматически анализировать JSON.

К сожалению, в настоящее время не удалось напрямую опубликовать bintray. DevEco Studio загрузила его в bintray, но сборка Gradle не удалась, поэтому, если вы хотите использовать, клонируйте его и добавьте модуль.

Основные и продвинутые способы использования HttpNet могут быть соответствующим образом упакованы и упрощены для логики запросов.

Создание GET-запроса: аналогично okhttp

RequestParams params = new RequestParams()
                .put("userName","oscer")
                .put("pwd","oschina");

Request request = new Request.Builder().encode("UTF-8")
                .method("GET")
                .timeout(13000)
                .url("http://www.oschina.net")
                .build();

Создание POST-запроса

//Запрос параметров
RequestParams params = new RequestParams()
                .put("userName","oscer")
                .putFile("fileName","file")
                .put("pwd","oschina");
//Объект запроса
Request request = new Request.Builder()
                .encode("UTF-8")
                .method("POST")
                .params(params)
                .timeout(13000)
                .url("http://www.oschina.net")
                .build();

Создание JSON POST-запроса

Request request = new Request.Builder()
                .encode("UTF-8")
                .method("POST")
                .content(new JsonContent("json")
                .timeout(13000)
                .url("http://www.oschina.net")
                .build();

Выполнение запроса:

//Создание клиента HttpNetClient, здесь можно выполнить глобальную статическую окончательную настройку
HttpNetClient client = new HttpNetClient();
client.setProxy("192.168.1.1",80);//Вы также можете включить этот клиент глобального прокси
client.addInterceptor(new Interceptor() {
            /* Перехватчик всегда будет выполняться до этого шага перед выполнением запроса, будь то синхронный или асинхронный.
            * Поэтому здесь можно динамически добавлять глобальные файлы cookie или другие заголовки.
            * Продвинутое использование: Если вы хотите зашифровать все интерфейсы формы для всех интерфейсов, вы также можете сделать это здесь.
            */
            @Override
            public void intercept(Request request) {
                Log.e("Перехватчик текущего потока:" + Thread.currentThread().getName() + "  --  " + request.url());

            }
        });
//Выполнение асинхронного запроса
client.newCall(request)
                //Если используется метод загрузки файла, вы можете включить мониторинг прогресса загрузки здесь
                .intercept(new InterceptListener() {
                    @Override
                    public void onProgress(final int index, final long currentLength, final long totalLength) {
                        Log.e("Текущий прогресс", "  --  " + ((float) currentLength / totalLength) * 100);
                    }
                })
                .execute(new Callback() {
                    @Override
                    public void onResponse(Response response) {
                        String body = response.getBody();//getBody() и toStream() являются взаимоисключающими
                        InputStream is = response.toStream();//Если вы используете загрузку, вы можете отслеживать ход загрузки здесь
                    }

                    @Override
                    public void onFailure(Exception e) {
                               Log.e("onFailure " + e.getMessage());
                    }
                });

// Вы также можете выполнять синхронные запросы в дочерних потоках. Это лучший способ, если вам нужно последовательно запрашивать несколько интерфейсов.
try {
     Response response = client.newCall(request).execute();
     String body = response.getBody();
}catch (Exception e){
      e.printStackTrace();
}

Использование Retrofit. В основе лежит предыдущий клиент HttpNetClient. На основе аннотаций во время выполнения добавляются конфигурации запросов, а при переключении пользовательского интерфейса используется обработчик событий HarmonyEventHandler.


// Создание интерфейса запроса java, реализация динамического прокси + аннотация, сервер возвращает что-то, Call<сервер возвращает json соответствующий Java bean>
public interface LoginService {

    //Обычный POST, имя метода добавляет аннотацию метода POST, GET, DELETE, Header и т.д., параметры метода добавляют аннотацию формы
    @Headers({"Cookie:cid=adcdefg;"})//Статический заголовок
    @POST("api/users/login")
    Call<BaseModel<User>> login(@Form("email") String email,
                                @Form("pwd") String pwd,
                                @Form("versionNum") int versionNum,
                                @Form("dataFrom") int dataFrom);

    // Загрузка файла
    @POST("action/apiv2/user_edit_portrait")
    @Headers("Cookie:xxx=hbbb;")//аннотация загрузки файла
    Call<String> postAvatar(@File("portrait") String file);


    //JSON POST
    @POST("action/apiv2/user_edit_portrait")
    @Headers("Cookie:xxx=hbbb;")
    Call<String> postJson(@Json String file);//Если это JSON POST, вы можете использовать его таким образом

    //PATCH
    @PATCH("mobile/user/{uid}/online")//Динамическое изменение пути URL
    Call<ResultBean<String>> handUp(@Path("uid") long uid);
}
``` Выполнение запроса
```java
public static final String API = "http://www.oschina.net/";
public static Retrofit retrofit = new Retrofit();
retrofit.registerApi(API);//注册api

//进阶使用,假设服务器返回来的 json 内容是 aes 加密的,那么可以添加转化器,拦截响应,aes 解密后再返回,此方法一定在子线程执行,直接执行耗时操作
retrofit.setConverterFactory(new ConverterFactory() {
    @Override
    public void convert(com.haibin.retrofit.Response response) {
        response.setBodyString("{json}");//拦截响应数据,修改内容,如 aes 解密后再返回
        Log.e("响应转换器当前线程: " + Thread.currentThread().getName());
    }
});

//执行异步请求,异步请求可以直接在 UI 线程执行
retrofit.from(LoginService.class)
        .login("xxx@qq.com", "123456", 2, 2);
        .withHeaders(Headers...)//动态添加某些 Header
        .execute(new Callback<BaseModel<User>>() {
            @Override
            public void onResponse(Response<BaseModel<User>> response) {
                //回调是切换在 UI 线程,可直接更新界面,自动解析 body,就是 BaseModel<User>,需要判断 body 为不为 null
            }

            @Override
            public void onFailure(Exception e) {

            }
 });

//当然也支持同步请求,顺序请求 N 个接口的最佳方法,解决逻辑嵌套,这里只能在子线程执行

Response<BaseModel<User>> response = retrofit.from(LoginService.class)
         .login("xxx@qq.com", "123456", 2, 2);
         .withHeaders(Headers...)
         .execute();

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

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

Введение

В **Hunman** используется сетевой фреймворк **Http**, который включает в себя **HttpNet**, реализованный на чистом Java, аналогичный **okhttp**. Поддерживает синхронный и асинхронный способы запроса. Также в Hunman есть собственная версия **retrofit**, аналогичная версии для Android. Позволяет элегантно использовать аннотации и автоматическую д... Развернуть Свернуть
MIT
Отмена

Обновления

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

Участники

все

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

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