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

OSCHINA-MIRROR/HarmonyOS-tpc-CoreProgress

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

CoreProgress

Эта библиотека помогает отображать прогресс при загрузке и скачивании файла с помощью OkHttp.

В состав CoreProgress входят:

  • Прогресс при скачивании файла с помощью OkHttp.
  • Прогресс при загрузке файла с помощью 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 )

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

Введение

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

Обновления

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

Участники

все

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

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