2017-02-18 12 views
3

Например, я загружаю файл с сервера, между связью теряется в тот момент, когда моя загрузка составляла 30%, через некоторое время я получил соединение. Я хочу начать загрузку с 30%, а не с 0%. Как добиться этого асинхронного андроида.Как возобновить загрузку, где она осталась в asynctask android

Если у вас есть альтернативный вариант, сообщите мне. ???

+0

Храните значение в [Shared Preferences] (https://developer.android.com/reference/android/content/SharedPreferences.html) и ваша проблема будет решена. –

ответ

1

Вам нужно сначала выяснить, сколько байтов вы действительно загрузили. Я предлагаю сохранить ваш файл с другим именем при его загрузке, чтобы вы могли легко увидеть, есть ли у вас незавершенная загрузка.
Сначала проверьте статус файла, чтобы узнать, сколько вы загрузили.

private long isIncomplete(){ 
     File from = new File(dir,fileName+"-incomplete"); 
     if(from.exists()){ 
      Log.d("status","download is incomplete, filesize:" + from.length()); 
      return from.length(); 
     } 
     return 0; 
} 

Затем, создавая свой http-запрос, вы можете сообщить серверу, с какого момента он будет служить вам, чтобы вы могли возобновить загрузку.

long downloaded = isIncomplete(); 
urlConnection.setRequestProperty("Range", "bytes="+(downloaded)+"-"); 

См this class, что я написал несколько лет назад для полного осуществления.

Обновление: Я предлагаю вам не использовать общие настройки для этого. SSOT заявляет, что вы получаете информацию только из одного источника, не более того, считывая прогресс из загруженного файла.

0

Вы можете сохранить путь к файлу назначения в sharedpreferences, и вы можете сделать следующий код.

HttpURLConnection connection = (HttpURLConnection) url.openConnection();//Opening the url 

    File file=new File(DESTINATION_PATH); 
    if(file.exists()){ //check if file exists 
     downloaded = (int) file.length(); 
     connection.setRequestProperty("Range", "bytes="+(file.length())+"-"); 
    } 
else{ 
    connection.setRequestProperty("Range", "bytes=" + downloaded + "-"); 
} 
connection.setDoInput(true); 
connection.setDoOutput(true); 
pBar.setMax(connection.getContentLength()); 
in = new BufferedInputStream(connection.getInputStream()); 
fos=(downloaded==0)? new FileOutputStream(DESTINATION_PATH): new FileOutputStream(DESTINATION_PATH,true); 
bout = new BufferedOutputStream(fos, 1024); 
byte[] data = new byte[1024]; 
int x = 0; 
while ((x = in.read(data, 0, 1024)) >= 0) { 
    bout.write(data, 0, x); 
    downloaded += x; 
    pBar.setProgress(downloaded); 
} 
+0

вы пробовали этот код –

+0

его просто царапины моего кода приложения. – Noorul