Интеграционная конфигурация
Импортируйте один или несколько модулей ohos-networking, jackson-ohos-networking, rx-ohos-networking и rx2-ohos-networking в свой проект на основе HarmonyOS по мере необходимости. Используйте следующие зависимости:
implementation project(':ohos-networking')
implementation project(':jackson-ohos-networking')
implementation project(':rx-ohos-networking')
implementation project(':rx2-ohos-networking')
Кроме того, в базовом модуле ohos-networking необходимо добавить зависимость от ohos.jar, иначе компиляция не пройдёт. Формат следующий:
api files('D:\\HOSDEMO\\ohosjar\\ohos.jar')
Это означает, что нужно скопировать файл SDK ohos.jar на диск D, а затем заменить путь на фактический путь к файлу ohos.jar.
Скомпилируйте модуль и создайте jar-файл, который будет помещён в каталог libs.
Шаги: нажмите «Gradle» справа, выберите соответствующий модуль (например, ohos-networking), затем нажмите «Tasks», чтобы развернуть его, и нажмите «jar», чтобы создать файл.
Созданный jar-файл находится в каталоге build\libs соответствующего модуля.
Добавьте: поместите сгенерированный jar-файл в каталог entry или libs соответствующего модуля.
Добавьте центральный репозиторий.
allprojects {
repositories {
mavenCentral()
}
}
Добавьте необходимые зависимости.
implementation 'io.openharmony.tpc.thirdlib:ohos-networking:1.0.2'
implementation 'io.openharmony.tpc.thirdlib:jackson-ohos-networking:1.0.2'
implementation 'io.openharmony.tpc.thirdlib:rx-ohos-networking:1.0.2'
implementation 'io.openharmony.tpc.thirdlib:rx2-ohos-networking:1.0.2'
Использование jar-файлов
Конкретные версии сторонних библиотек см. в конфигурации зависимостей entry.
В вашем проекте используйте эту библиотеку
Не забудьте добавить сетевые разрешения в config.json вашего проекта.
"reqPermissions": [
{
"name": "ohos.permission.INTERNET"
}
]
Инициализируйте в AbilityPackage.
OhosNetworking.initialize(getApplicationContext());
Настройте OkHttpClient.
// Добавление сетевого перехватчика для целей отладки:
OkHttpClient okHttpClient = new OkHttpClient() .newBuilder()
.addNetworkInterceptor(new StethoInterceptor())
.build();
OhosNetworking.initialize(getApplicationContext(),okHttpClient);
Используйте Jackson Parser.
Установите JacksonParserFactory.
OhosNetworking.setParserFactory(new JacksonParserFactory());
Отправьте GET-запрос
Осуществите запрос OhosNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
.addPathParameter("pageNumber", "0")
.addQueryParameter("limit", "3")
.addHeaders("token", "1234")
.setTag("test")
.setPriority(Priority.LOW)
.build()
.getAsJSONArray(new JSONArrayRequestListener() {
@Override
public void onResponse(JSONArray response) {
// do anything with response
}
@Override
public void onError(ANError error) {
// handle error
}
});
Отправьте POST-запрос
Отправьте запрос OhosNetworking.post("https://fierce-cove-29863.herokuapp.com/createAnUser")
.addBodyParameter("firstname", "Amit")
.addBodyParameter("lastname", "Shekhar")
.setTag("test")
.setPriority(Priority.MEDIUM)
.build()
.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
// do anything with response
}
@Override
public void onError(ANError error) {
// handle error
}
});
Вы также можете публиковать объекты Java, json, файлы и т. д. в POST-запросах. Например:
User user = new User();
user.firstname = "Amit";
user.lastname = "Shekhar";
OhosNetworking.post("https://fierce-cove-29863.herokuapp.com/createUser")
.addBodyParameter(user) // публикация объекта Java
.setTag("test")
.setPriority(Priority.MEDIUM)
.build()
.getAsJSONArray(new JSONArrayRequestListener() {
@Override
public void onResponse(JSONArray response) {
// do anything with response
}
@Override **Использование собственного Java-объекта с JSON-парсером**
/--------------Пример один -> Получение списка пользователей----------------/ OhosNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}") .addPathParameter("pageNumber", "0") .addQueryParameter("limit", "3") .setTag(this) .setPriority(Priority.LOW) .build() .getAsObjectList(User.class, new ParsedRequestListener<List>() { @Override public void onResponse(List users) { // сделать что-либо с ответом Log.d(TAG, "размер userList: " + users.size()); for (User user : users) { Log.d(TAG, "id: " + user.id); Log.d(TAG, "имя: " + user.firstname); Log.d(TAG, "фамилия: " + user.lastname); } } @Override public void onError(ANError anError) { // обработать ошибку } }); /--------------Пример два -> Получение информации о пользователе----------------/ OhosNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}") .addPathParameter("userId", "1") .setTag(this) .setPriority(Priority.LOW) .build() .getAsObject(User.class, new ParsedRequestListener() { @Override public void onResponse(User user) { // сделать что-либо с ответом Log.d(TAG, "id: " + user.id); Log.d(TAG, "имя: " + user.firstname); Log.d(TAG, "фамилия: " + user.lastname); } @Override public void onError(ANError anError) { // обработать ошибку } }); /-- Примечание: здесь важны YourObject.class, getAsObject и getAsObjectList --/
**Загрузка файла с сервера**
OhosNetworking.download(url,dirPath,fileName) .setTag("downloadTest") .setPriority(Priority.MEDIUM) .build() .setDownloadProgressListener(new DownloadProgressListener() { @Override
<ohosnetworking.widget.ANImageView android:id="@+id/imageView" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" />
imageView.setDefaultImageResId(R.drawable.default); imageView.setErrorImageResId(R.drawable.error); imageView.setImageUrl(imageUrl);
### Из URL получение растрового изображения и добавление специальных параметров
OhosNetworking.get(imageUrl) .setTag("imageRequestTag") .setPriority(Priority.MEDIUM) .setBitmapMaxHeight(100) .setBitmapMaxWidth(100) .setBitmapConfig(Bitmap.Config.ARGB_8888) .build() .getAsBitmap(new BitmapRequestListener() { @Override public void onResponse(Bitmap bitmap) { // делаем что-либо с растровым изображением } @Override public void onError(ANError error) { // обрабатываем ошибку } });
### Обработка кодов ошибок
public void onError(ANError error) { if (error.getErrorCode() != 0) { // получена ошибка от сервера // error.getErrorCode() — код ошибки от сервера // error.getErrorBody() — тело ошибки от сервера // error.getErrorDetail() — просто деталь ошибки Log.d(TAG, "onError errorCode : " + error.getErrorCode()); Log.d(TAG, "onError errorBody : " + error.getErrorBody()); Log.d(TAG, "onError errorDetail : " + error.getErrorDetail()); // получаем проанализированный объект ошибки (если ApiError — это ваш класс) ApiError apiError = error.getErrorAsObject(ApiError.class); } else { // error.getErrorDetail() : connectionError, parseError, requestCancelledError Log.d(TAG, "onError errorDetail : " + error.getErrorDetail()); } }
### Удаление растрового изображения из кэша и очистка кэша
OhosNetworking.evictBitmap(key); // удаление растрового изображения с ключом из LruCache OhosNetworking.evictAllBitmap(); // очистка LruCache
### Предварительная выборка запроса (чтобы сразу вернуть его из кэша при необходимости)
OhosNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}") .addPathParameter("pageNumber", "0") .addQueryParameter("limit", "30") .setTag(this) .setPriority(Priority.LOW) .build() .prefetch();
### Настройка OkHttpClient для конкретного запроса
OkHttpClient okHttpClient = new OkHttpClient().newBuilder() .addInterceptor(new GzipRequestInterceptor()) .build();
OhosNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}") .addPathParameter("pageNumber", "0") .addQueryParameter("limit", "3") .addHeaders("token", "1234") .setTag("test") .setPriority(Priority.LOW) .setOkHttpClient(okHttpClient) // передача пользовательского okHttpClient .build() .getAsJSONArray(new JSONArrayRequestListener() { @Override public void onResponse(JSONArray response) { // делаем что-либо с ответом } @Override public void onError(ANError error) { // обрабатываем ошибку } });
### Отправка условного запроса (Building a request)
ANRequest.GetRequestBuilder getRequestBuilder = new ANRequest.GetRequestBuilder(ApiEndPoint.BASE_URL + ApiEndPoint.CHECK_FOR_HEADER);
if(isHeaderRequired){ getRequestBuilder.addHeaders("token", "1234"); } Если (executorRequired) {
getRequestBuilder.setExecutor(Executors.newSingleThreadExecutor());
}
ANRequest anRequest = getRequestBuilder.build();
anRequest.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
// сделать что-либо с ответом
}
@Override
public void onError(ANError error) {
// обработать ошибку
}
});
OhosNetworking.download(url, dirPath, fileName)
.setTag("downloadTest")
.setPriority(Priority.MEDIUM)
.build()
.setAnalyticsListener(new AnalyticsListener() {
@Override
public void onReceived(long timeTakenInMillis, long bytesSent, long bytesReceived, boolean isFromCache) {
Log.d(TAG, " timeTakenInMillis : " + timeTakenInMillis);
Log.d(TAG, " bytesSent : " + bytesSent);
Log.d(TAG, " bytesReceived : " + bytesReceived);
Log.d(TAG, " isFromCache : " + isFromCache);
}
})
.setDownloadProgressListener(new DownloadProgressListener() {
@Override
public void onProgress(long bytesDownloaded, long totalBytes) {
// сделать что-либо с прогрессом
}
})
.startDownload(new DownloadListener() {
@Override
public void onDownloadComplete() {
// сделать что-либо после завершения
}
@Override
public void onError(ANError error) {
// обработать ошибку
}
});
Примечание: если bytesSent или bytesReceived равно -1, это означает, что значение неизвестно.
OhosNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}")
.addPathParameter("userId", "1")
.setTag(this)
.setPriority(Priority.LOW)
.setUserAgent("getAnUser")
.build()
.getAsOkHttpResponseAndParsed(new TypeToken() {
}, new OkHttpResponseAndParsedRequestListener() {
@Override
public void onResponse(Response okHttpResponse, User user) {
// сделать что-либо с okHttpResponse и user
}
@Override
public void onError(ANError anError) {
// обработать ошибку
}
});
ANRequest request = AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
.addPathParameter("pageNumber", "0")
.addQueryParameter("limit", "3")
.build();
ANResponse<List> response = request.executeForObjectList(User.class);
if (response.isSuccess()) {
List<User> users = responseTwo.getResult();
} else {
// обработать ошибку
}
OhosNetworking.enableLogging(); // просто включить логирование
OhosNetworking.enableLogging(LEVEL.HEADERS); // включение логирования с уровнем
// Включение GZIP для запроса (не требуется, если ваш сервер не поддерживает сжатие GZIP), в любом случае ответы
// от сервера автоматически распаковываются при необходимости. Поэтому включите его только в том случае, если вам нужно, чтобы ваш запрос был
// сжат перед отправкой на сервер (убедитесь, что ваш сервер поддерживает сжатие GZIP).
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.addInterceptor(new GzipRequestInterceptor())
.build();
OhosNetworking.initialize(getApplicationContext(), okHttpClient);
Если вы используете Proguard с системой сборки Gradle (обычно так и есть), ... , вам ничего не нужно делать. Соответствующие правила Proguard будут применены автоматически. Если вам всё ещё нужны правила, применяемые в файле proguard-rules.pro
, то они выглядят следующим образом:
-dontwarn okio.**
Copyright (C) 2016 Amit Shekhar
Copyright (C) 2011 Android Open Source Project
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 )