2012-03-15 32 views
6

Tôi thực hiện một số tải xuống lớn. Tôi bắt đầu tải xuống đang được kết nối với 3G, tất cả đều ổn. Sau đó, tôi chuyển sang kết nối WiFi, nhưng yêu cầu trả về một ngoại lệ thời gian chờ. Tôi đã sử dụng thư viện HttpClient. Tôi đã thực hiện một cơ chế thử lại, vì vậy, khi yêu cầu trả về một ngoại lệ, nó ngủ trong 0,5 giây và cố gắng thực hiện lặp đi lặp lại. Tôi hy vọng rằng, sau khi kết nối với WiFi, yêu cầu Http có thể thực thi. Nhưng có vẻ như phương thức thực hiện Http trả về một đáp ứng null, tất cả thời gian sau đó. Rất lạ, nếu tôi lại chuyển sang 3G, phương thức thực hiện trả về một phản hồi tốt. Có ai có thể giúp tôi không :) ?HttpClient time out khi thay đổi từ 3G sang WiFi

+0

trên thực tế, nó trả về một ngoại lệ Socket, không phải là một phản hồi null –

Trả lời

4

Đầu tiên, có vẻ như nó có thể thuận tiện hơn khi sử dụng DownloadManager cho các tệp lớn - nó xử lý thử lại và mọi thứ.

Đối với HttpClient - nó được biết là có một số vấn đề, nhưng tôi không chắc chắn nếu bạn va vào một trong số họ hoặc chỉ cần bỏ qua một cái gì đó. Nó không được dùng như Gingerbread, bạn có thể muốn thử HttpUrlConnection thay vào đó, nó được cho là có ít vấn đề hơn HttpClient.

Ngoài ra, khi chuyển đổi giữa WIFI và kết nối di động, HttpClient có thể cần phải được khởi tạo lại hoàn toàn, có http range header để cho máy chủ biết byte bạn muốn tiếp tục tải xuống. Nhưng một lần nữa, tôi khuyên bạn nên dùng thử DownloadManager, nó có thể giúp bạn tiết kiệm rất nhiều thời gian.

+1

Vấn đề của tôi là tương tự, nhưng tôi không tải xuống tệp lớn, chỉ những tệp nhỏ và tôi bị ngoại lệ khi thay đổi từ 3G sang Wifi hoặc ngược lại. Tôi cũng đã cố gắng để tắt quản lý kết nối sau mỗi yêu cầu và tái tạo httpclient, nhưng vẫn còn cùng một vấn đề tồn tại. – Niko

+0

Ngoài ra khi sử dụng WebView để mở url, trước tiên với Wifi nó hoạt động, sau đó khi thay đổi sang 3G, ứng dụng của tôi không thể mở url thứ hai với WebView, vì vậy đây có vẻ là lỗi nền tảng. – Niko

+0

Hmm, vâng, với WebView cũng không thể sử dụng 3G, điều này có vẻ nghiêm trọng hơn nhiều so với việc sử dụng sai HttpClient. WebView sử dụng gọi gốc để tải url. Hm ... để chắc chắn - 3G có sẵn trên gói dữ liệu của bạn không? :) Bạn có thể tải bất kỳ thứ gì trên 3G với ứng dụng trình duyệt của bên thứ ba hoặc ứng dụng bên thứ ba không? Ngoài ra còn có cấu hình để được kiểm tra (Acess Point, vv). Tôi đoán là thiết bị có thể nghĩ rằng nó được kết nối với internet di động nhưng lưu lượng thực tế có thể không đi qua nếu AP không đúng hoặc nhà điều hành của bạn không cho phép 3G. –

0

Đây có thể là sự cố định tuyến: khi chuyển đổi giữa các loại mạng khác nhau thường là địa chỉ IP cục bộ và, quan trọng hơn, bảng định tuyến cục bộ thay đổi do cổng khác đang được sử dụng. Điều này có nghĩa rằng các gói đi lại tốt giữa máy khách và máy chủ sẽ không đạt được bất kỳ đích nào sau khi thay đổi mạng, nếu chúng được gửi cùng một tuyến đường. Nhiều khả năng việc triển khai ứng dụng khách của bạn phải được thông báo về sự thay đổi hoặc thậm chí khởi động lại hoàn toàn, để chiến lược định tuyến được khởi động lại.

Nếu tài liệu của các thành phần triển khai bạn sử dụng không tiết lộ bất cứ điều gì bạn có thể cố gắng theo dõi việc này bằng cách sử dụng gói sniffer như wireshark. Thông thường các gói chạy vào niết bàn hiển thị dễ dàng ở đó.

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