2009-02-26 54 views
6

Trong chương trình Android của tôi, tôi có một số mã tải xuống tệp. Điều này làm việc tốt, nhưng kể từ khi trên điện thoại di động, bạn có thể bị ngắt kết nối bất cứ lúc nào, tôi cần phải thay đổi nó làm nó kết nối lại và tiếp tục tải xuống khi bạn đang nửa chừng và ai đó gọi/bạn mất di động tiếp nhận/etc. Tôi không thể tìm ra cách để phát hiện InputStream đã ngừng hoạt động. Xem mã bên dưới:Ngắt kết nối Internet InputStream của Android

InputStream in = c.getInputStream(); 

    byte[] buffer = new byte[8024]; 
    int len1 = 0; 

    while ((len1 = in.read(buffer)) > 0) { 
     Log("-"+len1+"- Downloaded."); 
     f.write(buffer,0, len1); 
     Thread.sleep(50); 
    } 

Khi tôi bị mất kết nối internet, đăng nhập của tôi cho thấy:

Log: -8024- Downloaded. 
Log: -8024- Downloaded. 
Log: -8024- Downloaded. 
Log: -8024- Downloaded. 
Log: -6024- Downloaded. (some lower number) 

Và sau đó chương trình của tôi chỉ bị treo trên while ((len1 = vv Tôi cần phải làm cho nó quá khi internet bị ngắt kết nối tôi chờ đợi cho internet được kết nối một lần nữa và sau đó tiếp tục tải về

Trả lời

1

Hãy xem ở đây:. http://developer.android.com/reference/java/nio/channels/SocketChannel.html

EDIT (dựa trên bình luận): http://www.jguru.com/faq/view.jsp?EID=72378

Vì vậy, suy nghĩ dựa trên ở trên .... bạn có thể đặt đọc trong một chủ đề và kiểm tra định kỳ để xem liệu đã ngừng đọc dữ liệu (cập nhật một biến chia sẻ có lẽ). Nếu nó đã giết kết nối và các chủ đề và đối phó với nó tuy nhiên bạn cần.

Một cách khác là không sử dụng HTTPURLConnection và xử lý các bit bạn cần.

+1

Xin chào, cảm ơn nhưng tôi có kết nối HTTPURL - làm thế nào để bạn có được SocketChannel từ đó? Cảm ơn, –

Các vấn đề liên quan