Эта библиотека помогает отображать прогресс при загрузке и скачивании файла с помощью OkHttp.
Примерное приложение требует следующие разрешения:
ohos.permission.INTERNET
Поддержка cleartextTraffic по умолчанию отключена для HTTP. Однако, HTTPS поддерживается по умолчанию. Для поддержки HTTP требуется добавить "network" в файл config.json и установить атрибут "cleartextTraffic" в true.
{
"deviceConfig": {
"default": {
"network": {
"cleartextTraffic": true
}
}
}
}
OkHttpClient okHttpClient = new OkHttpClient();
Request.Builder builder = new Request.Builder();
builder.url(url);
builder.get();
Call call = okHttpClient.newCall(builder.build());
LogUtil.info("TAG", "url : " + url);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException exception) {
LogUtil.error("TAG", "====onFailure======== e.getMessage() : " + exception.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
LogUtil.info("TAG", "=============onResponse===============");
LogUtil.info("TAG", "response length:" + response.body().contentLength());
LogUtil.info("TAG", "Content-Length: " + response.header("Content-Length"));
ResponseBody responseBody = ProgressHelper.withProgress(response.body(), new ProgressUIListener() {
// Если вам не требуется этот метод, не переопределяйте его.
// Это не абстрактный метод, просто пустой метод.
@Override
public void onUIProgressStart(long totalBytes) {
super.onUIProgressStart(totalBytes);
LogUtil.info("TAG", "onUIProgressStart:" + totalBytes);
downloadInfo.setText("onUIProgressStart:" + totalBytes);
}
``````markdown
## Загрузка файла
```java
String path = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
File outFile = new File(path + "/temp.mp4");
String url = "";
OkHttpClient okHttpClient = new OkHttpClient();
Request.Builder builder = new Request.Builder();
builder.url(url);
MultipartBody.Builder bodyBuilder = new MultipartBody.Builder();
bodyBuilder.addFormDataPart("test", outFile.getName(), RequestBody.create(outFile, MediaType.parse("video/mp4")));
MultipartBody build = bodyBuilder.build();
RequestBody requestBody = ProgressHelper.withProgress(build, new ProgressUIListener() {
// Если этот метод вам не нужен, его можно не переопределять.
// Это не абстрактный метод, а просто пустой метод.
@Override
public void onUIProgressStart(long totalBytes) {
super.onUIProgressStart(totalBytes);
LogUtil.info("TAG", "onUIProgressStart:" + totalBytes);
}
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
LogUtil.info("TAG", "=============start===============");
LogUtil.info("TAG", "onUIProgressChanged totalBytes : " + totalBytes
+ " numBytes : " + numBytes + " percent : " + percent
+ " fp : " + (numBytes * 100) / totalBytes + " speed : " + speed);
downloadProgeress.setProgressValue((int) ((numBytes * 100) / totalBytes));
downloadInfo.setText("numBytes:" + numBytes + " bytes totalBytes:" + totalBytes
+ " bytes percent:" + percent * 100 + " % speed:" + speed * 1000 / 1024 / 1024 + " MB/s");
}
// Если вам не требуется этот метод, не переопределяйте его.
// Это не абстрактный метод, просто пустой метод.
@Override
public void onUIProgressFinish() {
super.onUIProgressFinish();
LogUtil.error("TAG", "onUIProgressFinish");
}
});
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
LogUtil.info("TAG", "=============start===============");
LogUtil.info("TAG", "numBytes:" + numBytes);
LogUtil.info("TAG", "totalBytes:" + totalBytes);
LogUtil.info("TAG", "percent:" + percent);
LogUtil.info("TAG", "speed:" + speed);
LogUtil.info("TAG", "============= end ===============");
uploadProgress.setProgressValue((int) ((numBytes * 100) / totalBytes));
uploadInfo.setText("numBytes:" + numBytes
+ " байт totalBytes:" + totalBytes
+ " байт percent:" + percent * 100
+ " %" + " скорость:" + speed * 1000 / 1024 / 1024 + " МБ/с");
}
``` // Если данный метод вам не требуется, его можно не переопределять.
// Это не абстрактный метод, а просто пустой метод.
@Override
public void onUIProgressFinish() {
super.onUIProgressFinish();
LogUtil.info("TAG", "onUIProgressFinish:");
}
});
builder.post(requestBody);
```
### Загрузка
```java
String path = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
File outFile = new File(path + "/temp.mp4");
String url = "";
OkHttpClient okHttpClient = new OkHttpClient();
Request.Builder builder = new Request.Builder();
builder.url(url);
MultipartBody.Builder bodyBuilder = new MultipartBody.Builder();
bodyBuilder.addFormDataPart("test", outFile.getName(), RequestBody.create(outFile, MediaType.parse("video/mp4")));
MultipartBody build = bodyBuilder.build();
RequestBody requestBody = ProgressHelper.withProgress(build, new ProgressUIListener() {
// Если данный метод вам не требуется, его можно не переопределять.
// Это не абстрактный метод, а просто пустой метод.
@Override
public void onUIProgressStart(long totalBytes) {
super.onUIProgressStart(totalBytes);
LogUtil.info("TAG", "onUIProgressStart:" + totalBytes);
}
@Override
public void onUIProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
LogUtil.info("TAG", "=============start===============");
LogUtil.info("TAG", "numBytes:" + numBytes);
LogUtil.info("TAG", "totalBytes:" + totalBytes);
LogUtil.info("TAG", "percent:" + percent);
LogUtil.info("TAG", "speed:" + speed);
LogUtil.info("TAG", "============= end ===============");
uploadProgress.setProgressValue((int) ((numBytes * 100) / totalBytes));
uploadInfo.setText("numBytes:" + numBytes
+ " байт totalBytes:" + totalBytes
+ " байт percent:" + percent * 100
+ " %" + " скорость:" + speed * 1000 / 1024 / 1024 + " МБ/с");
}
}); // Если этот метод вам не нужен, его можно не переопределять.
// Это не абстрактный метод, а просто пустой метод.
@Override
public void onUIProgressFinish() {
super.onUIProgressFinish();
LogUtil.info("TAG", "onUIProgressFinish:");
}
});
builder.post(requestBody);
```
```Вызов вызова = клиентHTTPOk.newCall(построитель.build());
вызов.enqueue(new Callback() {
@Override
public void onFailure(Вызов вызов, ИсключениеIOException исключение) {
LogUtil.error("TAG", "=============onFailure===============" + исключение.getMessage());
исключение.printStackTrace();
}
}); @Override
public void onResponse(Запрос запрос, Ответ ответ) throws ИсключениеIOException {
LogUtil.info("TAG", "=============onResponse===============");
LogUtil.info("TAG", "запрос заголовков:" + ответ.request().headers());
LogUtil.info("TAG", "ответ заголовков:" + ответ.headers());
}
});
### Callback в оригинальном потоке
Если вам не нужен callback в потоке UI, вы можете использовать ProgressListener для callback в вашем оригинальном потоке.
```
//callback в оригинальном потоке.
ProgressListener progressListener = new ProgressListener() {
//если вам не нужен этот метод, не переопределяйте его. Это не абстрактный метод, просто пустой метод.
@Override
public void onProgressStart(long totalBytes) {
super.onProgressStart(totalBytes);
}
@Override
public void onProgressChanged(long numBytes, long totalBytes, float percent, float speed) {
}
//если вам не нужен этот метод, не переопределяйте его. Это не абстрактный метод, просто пустой метод.
@Override
public void onProgressFinish() {
super.onProgressFinish();
}
};
```
# Инструкции по установке
КорпусProgress зависит от OkHttp.
1. Для использования модуля КорпусProgress в вашем образце приложения, добавьте следующие зависимости для генерации hap/har:
Измените входящий build.gradle как ниже:
```
dependencies {
implementation fileTree(dir: 'libs', include: ['*.har'])
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.1'
implementation project(path: ':библиотека')
}
```2. Для использования CorpusProgress в отдельном приложении, добавьте следующие зависимости и включите "CorpusProgress.har" в папке libs модуля "вход":
Измените входящий build.gradle如下:
```
dependencies {
implementation fileTree(dir: 'libs', include: ['*.har'])
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.1'
}
```3. Для использования КорпусProgress из удалённого репозитория в отдельном приложении, добавьте следующие зависимости "вход" модуль:
Измените вход build.gradle следующим образом:
```
dependencies {
implementation fileTree(dir: 'libs', include: ['*.har'])
implementation 'io.openharmony.tpc.thirdlib:CoreProgress:1.0.1'
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.1'
}
```
# Лицензия
Copyright 2017 [Оригинальное имя автора]
Распространяется под лицензией Apache License, Версия 2.0 ("Лицензия");
вы можете использовать этот файл только в соответствии с Лицензией.
Вы можете получить копию Лицензии по адресу
<http://www.apache.org/licenses/LICENSE-2.0>
В случае если это требует применимое законодательство или было согласовано письменно, программное обеспечение
распространяется под Лицензией на условиях "КАК ЕСТЬ".
Указанное выше не является гарантией каких-либо условий или обязательств, явных или подразумевающихся.
См. Лицензию для конкретной языковой формы регламентирующей права использования и ограничения, предусмотренные Лицензией.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )