2015-06-22 2 views
0

У меня есть Android-центр для загрузки файлов на сервер. Файлы будут добавлены в очередь intentservice на каждые 1 минуту. Он отлично работает в устройствах Android с ОС менее 5.0.1. Но в android 5.0.1 при загрузке файла, если сеть потеряна, я не получаю никакого ответа, не бросая никаких исключений, и служба намерения заблокирована. Файлы не загружаются с этой точки. Я должен перезапустить приложение, чтобы снова запустить службу. Ниже приведен код, который у меня есть в методе onHandleIntent.android 5.0.1 загрузка файла не исключение при отключении сети

  int ReadBytes = 0; 
      int BUFSIZ = 4096; 
      byte Buf[] = new byte[BUFSIZ]; 
      outputStream = conn.getOutputStream(); 
      dataOutputStream = new DataOutputStream(outputStream); 
      fileInputStream = new FileInputStream(source); 
      long prevBytesRead = 0; 
      ReadBytes = fileInputStream.read(Buf, 0, BUFSIZ); 
      while(ReadBytes>0){ 
       dataOutputStream.write(Buf, 0, ReadBytes); 
       prevBytesRead += ReadBytes; 
       long totalbytes = fileInputStream.getChannel().size(); 
       ReadBytes = fileInputStream.read(Buf, 0, BUFSIZ); 
      } 

      outputStream.flush(); 
      dataOutputStream.flush(); 

Любая помощь будет принята с благодарностью.

+0

'long totalbytes = fileInputStream.getChannel(). Size();'. Лучше удалите это утверждение. Сначала это неверно. Во-вторых, вы его не используете. – greenapps

ответ

0

Вы, вероятно, протекает поток, вы должны попробовать окружив его попробовать/поймать блока:

try { 
     int ReadBytes = 0; 
     int BUFSIZ = 4096; 
     byte Buf[] = new byte[BUFSIZ]; 
     outputStream = conn.getOutputStream(); 
     dataOutputStream = new DataOutputStream(outputStream); 
     fileInputStream = new FileInputStream(source); 
     long prevBytesRead = 0; 
     ReadBytes = fileInputStream.read(Buf, 0, BUFSIZ); 
     while(ReadBytes>0){ 
      dataOutputStream.write(Buf, 0, ReadBytes); 
      prevBytesRead += ReadBytes; 
      long totalbytes = fileInputStream.getChannel().size(); 
      ReadBytes = fileInputStream.read(Buf, 0, BUFSIZ); 
     } 

     outputStream.flush(); 
     dataOutputStream.flush(); 
} catch (IOException e) { 

} finally { 
     // Close streams with an additional try/catch 
} 

Может быть, вы должны смотреть на Infer инструмент Facebook, fbinfer.com: очень полезно для таких ситуаций ,

+0

jihonora, у меня есть блок catch try в коде. Я не включил этот блок здесь. – karthikbv

+0

@karthikbv OK, тогда весь фрагмент необходим, чтобы получить полную картину – jlhonora