Advertisement
  1. Code
  2. Android SDK

Tạo ứng dụng khách Twitter cho Android: Tạo cơ sở dữ liệu timeline

by
Difficulty:IntermediateLength:LongLanguages:

Vietnamese (Tiếng Việt) translation by Andrea Ho (you can also view the original English article)

Trong loạt bài này, chúng tôi đang xây dựng một ứng dụng khách Twitter cho nền tảng Android bằng thư viện Twitter4J. Hướng dẫn này sẽ tạo database (cơ sở dữ liệu) SQLite để lưu trữ timeline (mốc thời gian) tại timeline của người dùng. Chúng tôi cũng sẽ ánh xạ dữ liệu từ database vào các View mà chúng tôi đã tạo lần trước bằng một Adapter để người dùng có thể xem các cập nhật của họ.


Loạt bài này gồm có:

  1. Tạo ứng dụng khách Twitter cho Android: Cài đặt & Tổng quan
  2. Tạo ứng dụng khách Twitter cho Android: Xây dựng giao diện
  3. Tạo ứng dụng khách Twitter cho Android: Tạo database timeline
  4. Tạo ứng dụng khách Twitter cho Android: Truy xuất các cập nhật bằng một dịch vụ
  5. Tạo ứng dụng khách Twitter cho Android: Tweet, Tweet lại và trả lời

Trong hai hướng dẫn đầu tiên, chúng tôi thiết lập dự án trong Eclipse, đã đăng ký ứng dụng với Twitter, nhập file JAR Twitter4J và xây dựng giao diện người dùng. Chúng tôi cũng đã xử lý việc người dùng đăng nhập vào tài khoản Twitter của họ và cho phép ứng dụng truy cập các tweet của họ.

Hướng dẫn này sẽ tạo database SQLite để lưu trữ timeline riêng của người dùng. Chúng tôi cũng sẽ ánh xạ dữ liệu từ database vào các View mà chúng tôi đã tạo lần trước bằng một Adapter để người dùng có thể xem các cập nhật của họ.


Bước 1: Tạo database

Hãy trực tiếp tạo database timeline bằng SQLite. Tạo một class mới trong dự án của bạn bằng cách chọn nó trong Package Explorer, chọn File > New > Class. Nhập "NiceDataHelper" làm tên class. Mở file class mới và extend khai báo như sau:

Đây là class hỗ trợ database cho hệ thống SQLite. Trong class này, chúng tôi sẽ tạo ra và quản lý database cho các tweet của timeline tại nhà.

Bổ sung các import sau vào trên cùng của class:

Các import này dùng cho xử lý database cơ bản và ghi nhật ký lỗi, cộng với Context của ứng dụng để tham khảo chung.

Database sẽ có một bảng duy nhất cho các cập nhật tweet. Bảng này sẽ bao gồm các cột sau cho mỗi tweet: ID trạng thái Twitter; nội dung tweet; screen-name của tweeter; thời gian tweet được gửi đi; URL của hình ảnh hồ sơ của người gửi tweet.

Hãy bắt đầu bằng cách tạo vài constant trong class:

Các constant (biến không thay đổi) này bao gồm tên phiên bản của database mà bạn nên thay đổi nếu bạn muốn nâng cấp database trong các phát triển ứng dụng sau này. Các biến cũng bao gồm tên của database và tên cho các cột. Class BaseColumns giúp chúng ta gán một cột ID duy nhất bằng cách sử dụng hậu tố "_id".

Tiếp theo hãy xây dựng SQLite create table String cho bảng home:

Tạo phương thức constructor cho class helper của database:

Hàm constructor đơn giản chỉ gọi phương thức superclass. Tiếp theo hãy thêm phương thức "onCreate" mà chúng tôi sẽ triển khai phần tạo bảng database:

Ở đây chúng tôi chỉ đơn giản là thực hiện chuỗi SQL tạo database. Vào cuối phương thức, bảng sẽ được tạo.

Để hoàn tất việc chuẩn bị database của chúng tôi, hãy triển khai phương thức "onUpgrade" trong trường hợp bạn quyết định thay đổi database tại một thời điểm sau này:

Điều này cho phép bạn nâng cấp database của mình bằng cách thay đổi số phiên bản và String tạo ra hoặc bất kỳ cột nào.

Bây giờ chúng ta sẽ thêm một phương thức cuối cùng vào class helper của database của chúng ta. Phương thức này sẽ trả về các giá trị từ các cập nhật trạng thái Twitter được truy xuất gần nhất và sẽ được gọi từ class Service mà chúng ta tạo trong hướng dẫn tiếp theo. Hãy bổ sung nội dung phương thức như sau:

Bên trong phương thức này, chúng ta sẽ chuyển đổi đối tượng được truyền vào Status thành một tập hợp ContentValues. Class Status là một phần của thư viện Twitter4J, mô hình hóa một cập nhật trạng thái hoặc tweet. Khi ứng dụng Service truy xuất timeline tại nhà của người dùng, nó sẽ chuyển từng cập nhật Status trong đó sang phương thức "getValues". Phương thức này sẽ lấy thông tin từ tweet mà chúng tôi muốn lưu trữ trong database, tức là ID, text, username, time và URL hình ảnh hồ sơ. Phương thức sẽ đặt từng giá trị trong tập hợp ContentValues mà sau đó nó sẽ trả về. Sau đó, Service sẽ cố gắng ghi dữ liệu trong ContentValues vào database, cập nhật dữ liệu đó bằng các tweet mới được truy xuất.

Chúng tôi sẽ triển khai hầu hết quy trình này khi chúng tôi tạo Service trong hướng dẫn tiếp theo. Bây giờ tất cả những gì chúng ta cần làm là cung cấp phần nội dung của phương thức "getValues". Trước dòng trả về các giá trị, bổ sung phần sau:

Quá trình có thể gây ra exception, vì vậy các cần thiết phải có try và catch. Lưu ý rằng phương thức cố gắng truy xuất từng phần tử của bản cập nhật Status mà chúng tôi đã thiết kế database để lưu trữ bằng các phương thức Twitter4J. Bạn sẽ cần một vài import khác bổ sung vào class:


Bước 2: Tạo class Adaptor

Chúng tôi sẽ sử dụng class Adaptor để ánh xạ dữ liệu tweet đến các View của giao diện người dùng mà chúng tôi đã tạo trong hướng dẫn trước. ListView mà chúng tôi đã tạo trong file bố cục XML cho timeline sẽ hiển thị các bản cập nhật tweet mới khi chúng tồn tại. Mỗi bản cập nhật tweet sẽ được hiển thị trong bố cục cập nhật XML mà chúng tôi cũng đã định nghĩa. Nếu bạn nhìn lại "res/layout/update.xml", bạn sẽ thấy rằng có các phần để hiển thị tất cả các mục dữ liệu chúng tôi đang lưu trữ trong database, như là hình ảnh hồ sơ người dùng và screen-name, tweet và thời gian đã được tweet.

Class Adaptor sẽ ánh xạ dữ liệu tweet vừa cập nhật đến các View giao diện người dùng này. Thay vì phải thực hiện điều này thủ công, class "SimpleCursorAdaptor" cho phép chúng tôi tự động hóa một phần của quy trình, ánh xạ dữ liệu vào các View trong khi vẫn cho phép chúng tôi điều chỉnh quy trình ánh xạ này cho phù hợp với nhu cầu của ứng dụng.

Tạo một class mới trong ứng dụng của bạn, đặt tên là "UpdateAdapter". Extend khai báo class như sau:

Import các parent class và Log class như sau:

Thêm các giá trị biến số như sau:

Thay đổi Key cho nhà phát triển Twitter để thể hiện cho chính bạn, như bạn đã sử dụng trong class chính Activity của ứng dụng trong bài hướng dẫn trước. Mảng "from" biểu thị tên của từng cột trong bảng database đang được ánh xạ. Mảng "to" thể hiện ID của các View mà các mục "from" sẽ được ánh xạ tới. Tất cả các ID đều được bao gồm trong các bố cục XML mà chúng ta đã tạo trong hướng dẫn trước.


Bước 3: Ánh xạ dữ liệu tới giao diện người dùng

Trong class Adaptor của bạn, hãy thêm một phương thức constructor như sau:

Code này gọi hàm constructor của superclass, chuyển qua Context ứng dụng, mục View trong đó mà dữ liệu sẽ được hiển thị, Cursor dùng để truyền dữ liệu và các mảng "from" và "to" mà chúng ta đã tạo như các biến số instance. Bạn sẽ cần các câu lệnh import sau cho code này:

Điều này thực hiện phần trung tâm của quy trình ánh xạ, tức là hiển thị dữ liệu trong các View được chỉ định. Tuy nhiên, chúng tôi cũng muốn điều chỉnh hành vi và sự xuất hiện của các thành phần giao diện người dùng. Chúng tôi sẽ điều chỉnh quy trình ánh xạ để tìm lấy hình ảnh hồ sơ cho mỗi tweet và định dạng thời gian cập nhật. Trong hướng dẫn cuối cùng của loạt bài này, chúng tôi cũng sẽ mở rộng mã này để thiết lập click listerner cho nút reweet, nút repy và username của Twitter cho mỗi tweet.

Triển khai phương thức "bindView" trong class Adaptor của bạn bằng cách sử dụng outline sau đây:

Ở đây chúng ta chỉ đơn giản gọi phương thức superclass. Phương thức "bindView" cho phép chúng tôi chỉ định xử lý bổ sung khi dữ liệu được ánh xạ tới các View. Trước tiên, hãy thử tải xuống hình ảnh hồ sơ cho tweet cập nhật gần nhất:

Chúng tôi cần các block try & catch vì chúng tôi đang cố tải một tài nguyên bên ngoài. Phương thức đầu tiên lấy URL của hình ảnh hồ sơ như được lưu trữ trong cột database. Sau đó, phương thức lấy tham chiếu đến mục View để hiển thị hình ảnh, bằng cách dùng thuộc tính ID của nó, như chúng ta đã đặt trong file cập nhật của bố cục XML. Cuối cùng, code tìm lấy hình ảnh dưới dạng InputStream, import nó dưới dạng Drawable và đặt nó làm hình ảnh trong ImageView. Bạn sẽ cần các import sau đây:

Bây giờ hãy sửa đổi hiển thị thời gian cập nhật, vì nó sẽ được lưu trữ trong database dưới dạng số. Để chuyển đổi nó thành thời gian tương đối dễ đọc cho con người, hãy bổ sung đoạn code sau vào block catch:

Đầu tiên, chúng tôi truy xuất giá trị cột dưới dạng long, sau đó lấy một tham chiếu đến mục View để hiển thị nó trong một phần của bản cập nhật XML. Cuối cùng, chúng tôi định dạng nó dưới dạng String để người dùng có thể thấy khi tweet được gửi liên quan đến thời điểm hiện tại. Bạn sẽ cần các câu lệnh import bổ sung:


Bước 4: Xây dựng Home Timeline

Trở lại class chính Activity của ứng dụng "TwitNiceActivity" bây giờ hãy triển khai phương thức "setupTimeline". Trong hướng dẫn tiếp theo, chúng tôi sẽ bổ sung xử lý Service vào phương thức, nhưng bây giờ chúng ta hãy xử lý phần khởi động database và Adapter. Trước khi bạn bắt đầu phương thức, hãy bổ sung các biến instance sau ở trên cùng của class:

Chúng tôi sẽ sử dụng các biến này khi xây dựng timeline. Bổ sung phần sau đây để xác định kích thước mặc định cho hiển thị hình ảnh hồ sơ:

Bạn sẽ cần bổ sung các mục nhập sau:

Bây giờ để thiết lập timeline. Nếu bạn đã tạo ra outline cho phương thức "setupTimeline" để kiểm tra lần trước, bạn chỉ cần bổ sung nội dung của phương thức tiếp theo. Nếu bạn chưa tạo, thì lúc này hãy tạo outline cho phương thức:

Bạn có thể nhớ trong lần trước thì phương thức này được gọi khi người dùng đã cấp phép cho ứng dụng sử dụng tài khoản Twitter của họ. Trong phương thức, chúng tôi sẽ khởi tạo class helper cho database, truy xuất database có thể đọc được, khởi tạo class Adapter và đặt nó để ánh xạ dữ liệu tới các View của chúng tôi. Bắt đầu bằng cách đặt View cho nội dung timeline:

Một số phương pháp chúng tôi sẽ sử dụng có thể đưa ra các ngoại lệ, vì vậy, hãy bổ sung các block try & catch:

Chúng tôi sẽ bổ sung các đoạn trích code tiếp theo trong try. Ở đây chúng ta sẽ khởi tạo các biến mà chúng ta đã khai báo ở đầu class. Trước tiên, hãy tham khảo ListView từ bố cục timeline, trong đó các View cập nhật sẽ xuất hiện:

Tiếp theo tạo một instance của class Database Helper và dùng nó để truy xuất Database có thể đọc được:

Dòng đầu tiên ở đây tạo ra một instance của class Database Helper mà chúng ta đã định nghĩa, trong khi dòng thứ hai thực sự lấy database. Bây giờ chúng ta hãy truy vấn database và thu được một Cursor để duyệt qua nó, truyền Cursor này đến class Adaptor:

Truy vấn database chỉ đơn giản là lấy tất cả mọi thứ từ bảng dữ liệu, xếp thứ tự nó với các tweet cập nhật gần đây nhất trước tiên. Chúng ta truyền Cursor vào cho phương thức constructor của class Adaptor mà chúng ta đã tạo ra.


Tiếp theo

Trong hướng dẫn này, chúng tôi đã xây dựng database cho timeline tweet của mình, định nghĩa một Adapter để hiển thị dữ liệu trong các View giao diện người dùng của chúng tôi và sử dụng các class này trong Activity của ứng dụng để xây dựng timeline có thể nhìn thấy.

Trong hướng dẫn tiếp theo, chúng tôi sẽ thiết lập Service và Broadcast Receiver để liên tục lấy các bản cập nhật mới và hiển thị chúng trên timeline của người dùng. Hiện tại khi bạn chạy ứng dụng, bạn sẽ không thấy bất kỳ cập nhật nào, vì chúng tôi chưa lấy được timeline của người dùng. Là một phần của class Service, chúng tôi sẽ tìm timeline bằng các phương thức Twitter4J, gọi chúng theo chu kỳ thời gian đã đặt để liên tục truy xuất các tweet gần đây nhất từ các tài khoản mà người dùng theo dõi. Sau đó chúng tôi sẽ viết kết quả vào database và trình bày chúng trong màn hình timeline.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.