Mục lục:
- Gửi một tweet mới
- Trong MyAsyncTaskTweet, tham số được truyền vào doInBackground được coi là một tweet. Nhưng trong MyAsyncTaskTimeline, tham số được gửi qua doInBackground là một tên người dùng. Mã chuyển tên người dùng này đến phương thức getUserTimeline.
Video: Lập trình Android (Kotlin) - Bài 24: Xử lý AsyncTask 2025
Một AsyncTask là những gì bạn sử dụng khi một cái gì đó mất quá nhiều thời gian trong quá trình chạy ứng dụng Android của bạn. Ví dụ: người dùng yêu cầu một trang web. Ai biết phải mất bao lâu để tìm nạp trang? Dịch vụ lưu trữ trang web có thể đang có khối lượng lớn. Hoặc người dùng có thể đang trên một chuyến tàu đi qua một đường hầm.
Tất cả các loại sự kiện có thể làm chậm việc truy xuất trang. Và trong quá trình tìm kiếm này, người dùng có thể muốn nhấp vào các nút, cuộn một tài liệu, hoặc làm cái gì đó khác đòi hỏi phản hồi từ ứng dụng của bạn.
Bạn không thể dừng chương trình trong khi ứng dụng của bạn đợi một trang web, tìm kiếm thời gian Twitter hoặc cập nhật trạng thái Twitter của người dùng. Đó là lý do tại sao bạn mã yêu cầu mạng bên trong một AsyncTask.
AsyncTask của Android rất đa năng để xử lý tất cả các loại giá trị. Trên thực tế, tài liệu hướng dẫn xác định AsyncTask theo cách này:
Android. os. AsyncTask
Định nghĩa có ba trình giữ chỗ kiểu chung - Params, Progress và Result. Khi bạn tạo AsyncTask của riêng bạn, bạn "điền vào khoảng trắng" bằng cách chỉ định các loại thực tế thay cho Params, Progress và Result.
Gửi một tweet mới
Để thêm một tweet thay mặt cho người dùng, bạn lấy một đối tượng Twitter (ví dụ bạn đã làm với factory getInstance ()), và bạn gọi instance của updateStatus phương pháp. Bạn không muốn yêu cầu mạng này ngắt dòng chảy của hoạt động chính của bạn, vì vậy bạn đặt yêu cầu bên trong một AsyncTask. Tên tác vụ là MyAsyncTaskTweet. Ba loại chung chung của nhiệm vụ như sau: Chuỗi, Void, và Chuỗi:
Chuỗi , Void , Chuỗi >> ( Loại đầu tiên (String) đại diện một tweet 140 ký tự. Chứa một chuỗi các ký tự từ một trong các trường văn bản của hoạt động và chuyển chuỗi đó đến MyAsyncTaskTweet.-
Đoạn mã
execute (editTextTweet. GetText ().toString () Bên trong MyAsyncTaskTweet, phương pháp doInBackground gọi chuỗi đó tweet [0] và sử dụng chuỗi tweet [0] để cập nhật trạng thái của người dùng.
Tham số cho phương pháp updateStatus là một phần tử mảng. Đó là bởi vì, trong phần đầu của phương thức doInBackground, tweet là một tham số varargs. Từ varargs có nghĩa là "số lượng các đối số thay đổi. "Bạn có thể vượt qua càng nhiều giá trị để làmInBackground theo ý muốn. Trong phần thân của phương pháp, bạn coi tweet như thể đó là một mảng thông thường. Giá trị tweet đầu tiên là tweet [0]. Nếu có một giá trị tweet thứ hai, nó sẽ là tweet [1], vân vân.
Kiểu thứ hai (Void) là viết tắt của một giá trị (hoặc giá trị) đánh dấu sự tiến bộ của chủ đề nền trong việc hoàn thành công việc của nó.
Vì không có chỉ báo tiến trình, tên loại thứ hai là Void.
-
Trong Java, lớp Void là lớp wrapper cho giá trị void. Đặt nó vào lỗ đen của bạn của hư không!
Loại thứ ba (String) là viết tắt của cụm từ như
Thành công!
-
hoặc Không thể tweet . Phương pháp doInBackground tìm chuỗi kết hợp với chuỗi R. thành công, chuỗi R. twitter_failure, hoặc chuỗi R. general_failure và trả về chuỗi này như là kết quả của nó. Sau đó, phương pháp onPostExecute sẽ hiển thị chuỗi này trong trường editTextTweet của màn hình. Hình ảnh này tóm tắt cách tên kiểu chung chung ảnh hưởng đến các loại phương thức.
Việc sử dụng các loại trong MyAsyncTaskTweet.
Hình dưới đây tóm tắt cách các giá trị di chuyển từ nơi này đến nơi khác trong MyAsyncTaskTweet.
Lấy dòng thời gian của người dùng
Trong MyAsyncTaskTweet, tham số được truyền vào doInBackground được coi là một tweet. Nhưng trong MyAsyncTaskTimeline, tham số được gửi qua doInBackground là một tên người dùng. Mã chuyển tên người dùng này đến phương thức getUserTimeline.
Trong MyAsyncTaskTweet, giá trị được trả về từ doInBackground là một thông báo thành công hoặc thất bại. Nhưng trong MyAsyncTaskTimeline, giá trị được trả về từ doInBackground là một chuỗi đầy tweets (một dòng thời gian).
-
Đoạn mã lấy thời gian của người dùng trông giống như sau:
-
List statuses = null; statuses = twitter. getUserTimeline (tên người dùng [0]);
Một người tên Yusuke Yamamoto đã phát triển Twitter4J (hoặc ít nhất, Yusuke Yamamoto là trưởng dự án của Twitter4J) và vào một thời điểm nào đó, ông Yamamoto đã quyết định rằng phương thức getUserTimeline trả về một bộ sưu tập của twitter4J. Đối tượng trạng thái. (Mỗi ví dụ tình huống twitter4J.tìm một tweet) Vì vậy, để tôn vinh hợp đồng được đặt bằng cách gọi phương thức getUserTimeline, mã tuyên bố các trạng thái là một bộ sưu tập của twitter4J. Đối tượng trạng thái.
Một vài dòng sau đó trong mã, câu lệnh nâng cao cho bước qua tập hợp các giá trị trạng thái và nối văn bản của mỗi giá trị vào một chuỗi kết quả lớn. Vòng lặp thêm "n" (ký tự đi tới dòng tiếp theo của Java) sau mỗi lần tweet để đo tốt. Trong phương pháp onPostExecute, mã hiển thị chuỗi kết quả lớn trong trường textViewTimeline của màn hình.
Trong phương pháp doInBackground thứ hai, tên đầy đủ của twitter4j. Trạng thái được sử dụng. Điều này được thực hiện để phân biệt twitter4J. Lớp trạng thái từ AsyncTask của Android. Trạng thái lớp (một lớp bên trong của lớp AsyncTask).
Một AsyncTask có thể khá phức tạp. Nhưng khi bạn so sánh AsyncTask của Android với các lựa chọn thay thế luồng bằng tay, thì ý tưởng của AsyncTask không hề tồi. Trên thực tế, khi bạn thực hành một ít và tạo ra một số lớp học AsyncTask của riêng bạn, bạn thường quen suy nghĩ theo cách đó. Toàn bộ doanh nghiệp bắt đầu cảm thấy khá tự nhiên.
