2010-05-27 36 views
35

Tôi có tệp văn bản trên máy chủ của mình. Tôi muốn mở tệp văn bản từ Ứng dụng Android của mình và sau đó hiển thị văn bản trong một TextView. Tôi không thể tìm thấy bất kỳ ví dụ về làm thế nào để làm một kết nối cơ bản đến một máy chủ và nguồn cấp dữ liệu vào một String.Đọc tệp văn bản từ máy chủ trên Android

Bất kỳ trợ giúp nào bạn có thể cung cấp đều sẽ được đánh giá cao.

+0

Làm cách nào để bạn phân phối tệp văn bản trên máy chủ? Thông qua HTTP? – aioobe

+0

Vâng, nếu tôi truy cập http://www.mysite.com/thefile.txt, tôi có thể thấy văn bản. Trên iPhone tôi có thể kết nối với tập tin và nạp nó vào một String, sau đó làm bất cứ điều gì tôi muốn với nó. – Chris

Trả lời

54

Hãy thử như sau:

try { 
    // Create a URL for the desired page 
    URL url = new URL("mysite.com/thefile.txt"); 

    // Read all the text returned by the server 
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
    String str; 
    while ((str = in.readLine()) != null) { 
     // str is one line of text; readLine() strips the newline character(s) 
    } 
    in.close(); 
} catch (MalformedURLException e) { 
} catch (IOException e) { 
} 

(lấy từ Exampledepot: Getting text from URL)

nên hoạt động tốt trên Android.

+2

Lưu ý: Luôn đóng 'Closeables' của bạn trong khối' finally' vì đây là cách duy nhất để đảm bảo rằng chúng bị đóng ngay cả khi ngoại lệ bị ném. –

+0

Dường như lệnh in.close() cũng có thể ném IOException – Kurru

+0

Hey mã u than hoạt động cho tôi :) – user1387035

14

Trong khi URL.openStream sẽ hoạt động, bạn nên sử dụng thư viện Apache HttpClient đi kèm với Android cho HTTP. Trong số các lý do khác, bạn có thể sử dụng mã hóa nội dung (gzip) với nó, và điều đó sẽ làm cho việc chuyển tập tin văn bản nhỏ hơn nhiều (tuổi thọ pin tốt hơn, ít sử dụng hơn) và nhanh hơn.

Có nhiều cách khác nhau để sử dụng HttpClient và một số người trợ giúp tồn tại để bao bọc mọi thứ và làm cho nó dễ dàng hơn. Xem bài đăng này để biết thêm chi tiết về điều đó: Android project using httpclient --> http.client (apache), post/get method (và lưu ý HttpHelper tôi đã bao gồm ở đó sử dụng gzip, mặc dù không phải tất cả đều làm).

Ngoài ra, bất kể bạn sử dụng phương pháp nào để truy xuất dữ liệu qua HTTP, bạn sẽ muốn sử dụng AysncTask (hoặc Trình xử lý) để đảm bảo không chặn chuỗi giao diện người dùng trong khi thực hiện cuộc gọi mạng. Và lưu ý rằng bạn không nên sử dụng URL.openStream (mà không cần thiết lập một số cấu hình, như timeouts), mặc dù nhiều ví dụ cho thấy, bởi vì nó sẽ chặn vô thời hạn nếu bạn không có máy chủ (theo mặc định, nó có không có thời gian chờ): URL.openStream() Might Leave You Hanging.

+1

Đây là một người trả lời rất cũ, nhóm Android hiện khuyên bạn nên sử dụng các công cụ java.net chuẩn. Đối với một wrapper thực sự tốt đẹp xung quanh nó (mà xử lý thời gian chờ và LOT nhiều hơn) kiểm tra HttpRequest Kevin Sawicki: https://github.com/kevinsawicki/http-request –

+0

Câu trả lời được chấp nhận ở đây là tốt, nhưng tôi vẫn còn rất cảnh giác với thời gian chờ. Trong ví dụ đó, chúng không được thiết lập và url.openStream quay trở lại trong ngày được sử dụng để chỉ treo khi máy chủ không đáp ứng (thời gian chờ mặc định là/là 0, có nghĩa là không hết giờ).Bài viết tôi liên kết đã biến mất, nhưng có rất nhiều người khác lưu ý rằng: https://eventuallyconsistent.net/2011/08/02/working-with-urlconnection-and-timeouts/ –

5

Đừng quên thêm quyền truy cập internet vào tệp kê khai khi sử dụng tài nguyên mạng: (thêm vào tệp kê khai).

+5

Đây phải là nhận xét – Mangesh

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