Некоторые проблемы с загрузкой в Android

1

Я использую ниже код для загрузки файла:

URL u = new URL(one.getSrcPath());
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.setReadTimeout(10000);
c.connect();
int lenghtOfFile = c.getContentLength();
FileOutputStream f = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + "/" + SavePath, FileName);
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
int finishbyte = 0;
long total = 0;
while((len1 = in.read(buffer)) > 0) {
total += len1; //total = total + len1
f.write(buffer, 0, len1);
finishbyte++;
}
f.close();

У меня две проблемы: во-первых, почему загрузка загрузки загружается с очень высокой частотой? Во-вторых, если я хочу, чтобы мое задание загрузки загрузилось из точки останова. У меня есть финиш. Как я могу изменить?

  • 0
    Что представляет собой finishbyte ? Что вы пытаетесь скачать? Вы останавливаете свою программу в середине загрузки (точки останова?)?
  • 0
    Вы можете использовать AsyncTask для загрузки файла, это очень легко сделать!
Показать ещё 4 комментария
Теги:
download

2 ответа

1
Лучший ответ

finishbyte оба не представляют никакой информации (за исключением количества вызовов метода read, но, конечно, не размера загруженного файла), и не имеет значения, так как вы записали файл и можете использовать File.length() чтобы узнать, сколько вы получили до сих пор.

Чтобы возобновить загрузку:

Откройте файл, проверьте размер, запросите диапазон, используя заголовок http, который:

Range: <file.length()>-

(например, если вы загрузили 234 байта:

Range: 234-

Если код ответа с сервера составляет 206 частичного содержимого, вы можете добавить его в файл, если ему 200, вам необходимо перезаписать файл (содержимое изменилось или Range не поддерживается)

1

Чтобы начать загрузку файла, начинающегося с позиции finishbyte, вам нужно будет использовать HTTP-заголовок Range. Что касается проблемы с загруженными загрузками, это, вероятно, проблема с сетью или проблема со сном телефона, и в этом случае вы должны проверить блокировку Wi-Fi

Ещё вопросы

Сообщество Overcoder
Наверх
Меню