Hiển thị các bài đăng có nhãn Android. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Android. Hiển thị tất cả bài đăng

Giới thiệu REST API trong FLUTTER

Hướng dẫn căn bản: Cách tích hợp REST API  trong Flutter

Trong quá trình học và phát triển ứng dụng di động với Flutter, bạn sẽ nhận ra rằng một ứng dụng không thể chỉ hoạt động với dữ liệu tĩnh trên máy. Để ứng dụng "sống" và liên tục cập nhật thông tin (như đọc báo, xem danh sách sản phẩm, hiển thị thời tiết), bạn cần phải kết nối nó với máy chủ (server). Và cầu nối phổ biến nhất để làm việc này chính là REST API.

Hướng dẫn căn bản: Cách tích hợp REST API  trong Flutter


Bài viết này sẽ giải thích cho bạn REST API là gì theo ngôn ngữ đơn giản nhất, cũng như hướng dẫn chi tiết từng bước cách gọi một API trong Flutter để hiển thị dữ liệu lên màn hình. Hãy cùng bắt đầu nhé!



1. REST API là gì? Hiểu sao cho đơn giản?

Hãy tưởng tượng bạn đang vào một nhà hàng. Bạn (Ứng dụng Flutter - Client) muốn gọi món ăn. Nhà bếp (Máy chủ - Server) là nơi có nguyên liệu và chế biến món ăn. Tuy nhiên, bạn không thể tự chạy vào bếp lấy đồ ăn được. Bạn cần một người Bồi bàn (API) để ghi lại yêu cầu của bạn, mang vào bếp, và sau đó bưng món ăn từ bếp ra bàn cho bạn.

REST API (Representational State Transfer Application Programming Interface) chính là "người bồi bàn" đó trên môi trường internet. Nó tuân theo một bộ quy tắc nhất định để Client và Server có thể nói chuyện được với nhau.

Trong REST API, chúng ta có 4 hành động (phương thức) cơ bản tương ứng với chuẩn CRUD (Create, Read, Update, Delete):

  • GET (Read): Lấy dữ liệu từ server về (Ví dụ: Lấy danh sách sản phẩm).
  • POST (Create): Gửi dữ liệu mới lên server (Ví dụ: Tạo tài khoản mới, Gửi bình luận).
  • PUT / PATCH (Update): Cập nhật dữ liệu đã có trên server.
  • DELETE (Delete): Xóa dữ liệu trên server.

Dữ liệu trao đổi qua lại thường được định dạng dưới dạng JSON (JavaScript Object Notation) - một định dạng văn bản rất dễ đọc cho cả người và máy.

2. Tại sao ứng dụng Flutter của bạn lại cần API?

Sử dụng API mang lại những lợi ích khổng lồ cho ứng dụng di động:

  • Dữ liệu luôn mới: Bạn không cần bắt người dùng cập nhật ứng dụng trên App Store chỉ để đổi một dòng chữ hay thêm một sản phẩm. Mọi thứ được tải từ server xuống theo thời gian thực.
  • Tiết kiệm dung lượng: Ứng dụng sẽ rất nhẹ vì dữ liệu (hình ảnh, văn bản, video) nằm ở server, ứng dụng chỉ tải về những thứ cần thiết khi người dùng lướt tới.
  • Đồng bộ đa nền tảng: Bạn có thể dùng chung một REST API cho cả ứng dụng Flutter (iOS/Android), ứng dụng Web và ứng dụng Desktop. Đảm bảo mọi nền tảng đều thấy cùng một dữ liệu.

3. Ví dụ minh họa: Gọi API hiển thị danh sách bài viết

Trong ví dụ này, chúng ta sẽ sử dụng một Fake API miễn phí dành cho lập trình viên là JSONPlaceholder để lấy về một danh sách các bài viết (Posts) bằng phương thức GET.

Đường dẫn API: https://jsonplaceholder.typicode.com/posts

Bước 1: Cài đặt gói thư viện HTTP

Flutter mặc định không có sẵn công cụ tối ưu để gọi API, nên chúng ta sẽ sử dụng một thư viện (package) rất phổ biến của Google là http.

Mở file pubspec.yaml trong project của bạn và thêm dòng sau vào dưới mục dependencies:

dependencies:
  flutter:
    sdk: flutter
  http: ^1.1.0 # Thêm thư viện http tại đây

Sau đó chạy lệnh flutter pub get trong terminal để tải thư viện về.

Bước 2: Tạo Lớp Dữ Liệu (Model)

Khi gọi API, dữ liệu trả về là một chuỗi JSON (text). Để Flutter có thể hiểu và dễ dàng lấy ra các thông tin (như tiêu đề, nội dung), chúng ta cần chuyển đổi chuỗi JSON đó thành một đối tượng Dart. Ở đây ta tạo một class Post.

class Post {
  final int id;
  final String title;
  final String body;

  Post({required this.id, required this.title, required this.body});

  // Hàm chuyển đổi từ JSON (Map) sang Object Dart
  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(
      id: json['id'],
      title: json['title'],
      body: json['body'],
    );
  }
}

Bước 3: Viết hàm bất đồng bộ để gọi API (Fetch Data)

Việc kết nối mạng sẽ tốn thời gian (có thể nhanh hoặc chậm tùy mạng). Do đó, chúng ta phải sử dụng hàm bất đồng bộ (Future, async, await) để ứng dụng không bị đơ trong lúc chờ đợi server phản hồi.

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<List<Post>> fetchPosts() async {
  // Gửi request GET tới server
  final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));

  // Kiểm tra mã trạng thái (StatusCode 200 nghĩa là thành công)
  if (response.statusCode == 200) {
    // Ép kiểu dữ liệu chuỗi trả về sang dạng List
    List jsonResponse = jsonDecode(response.body);
    // Chuyển đổi List JSON sang List<Post>
    return jsonResponse.map((data) => Post.fromJson(data)).toList();
  } else {
    // Nếu lỗi, ném ra một ngoại lệ
    throw Exception('Không thể tải danh sách bài viết');
  }
}

Bước 4: Hiển thị dữ liệu lên giao diện với FutureBuilder

Để vẽ giao diện dựa trên dữ liệu đang tải từ mạng, Flutter cung cấp một Widget tuyệt vời có tên là FutureBuilder. Nó sẽ tự động cập nhật UI tùy theo trạng thái: Đang tải, Tải lỗi, hoặc Tải thành công.

import 'package:flutter/material.dart';

class PostListScreen extends StatefulWidget {
  @override
  _PostListScreenState createState() => _PostListScreenState();
}

class _PostListScreenState extends State<PostListScreen> {
  late Future<List<Post>> futurePosts;

  @override
  void initState() {
    super.initState();
    // Gọi hàm fetch data ngay khi màn hình khởi tạo
    futurePosts = fetchPosts();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Danh Sách Bài Viết API')),
      body: FutureBuilder<List<Post>>(
        future: futurePosts,
        builder: (context, snapshot) {
          // Trạng thái 1: Đang tải dữ liệu
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } 
          // Trạng thái 2: Có lỗi xảy ra
          else if (snapshot.hasError) {
            return Center(child: Text('Lỗi: ${snapshot.error}'));
          } 
          // Trạng thái 3: Tải thành công và có dữ liệu
          else if (snapshot.hasData) {
            List<Post> posts = snapshot.data!;
            return ListView.builder(
              itemCount: posts.length,
              itemBuilder: (context, index) {
                return Card(
                  margin: EdgeInsets.symmetric(horizontal: 10, vertical: 5),
                  child: ListTile(
                    leading: CircleAvatar(child: Text(posts[index].id.toString())),
                    title: Text(posts[index].title, style: TextStyle(fontWeight: FontWeight.bold)),
                    subtitle: Text(posts[index].body, maxLines: 2, overflow: TextOverflow.ellipsis),
                  ),
                );
              },
            );
          }
          // Trạng thái mặc định
          return Center(child: Text('Không có dữ liệu'));
        },
      ),
    );
  }
}

4. Những lưu ý quan trọng khi làm việc với API

Để ứng dụng của bạn trở nên chuyên nghiệp và ít gặp lỗi (bug) khi người dùng sử dụng, bạn cần chú ý những điểm sau khi làm việc với REST API:

  • Xử lý lỗi (Error Handling): Không phải lúc nào server cũng trả về kết quả thành công (Mã 200). Đôi khi mất mạng, đôi khi link API bị sai (Mã 404), hoặc lỗi từ server (Mã 500). Bạn phải luôn có khối lệnh try-catch hoặc xử lý statusCode cẩn thận để ứng dụng không bị văng (crash) bất ngờ.
  • Parsing JSON cẩn thận: Kiểu dữ liệu từ API trả về có thể thay đổi (ví dụ API hứa trả về một chuỗi String nhưng lại trả về null). Bạn nên kiểm tra null an toàn (Null Safety) khi chuyển đổi JSON. Các lập trình viên thường dùng thư viện như json_serializable hoặc freezed để tự động hóa và làm an toàn quá trình này thay vì tự viết tay.
  • Quản lý trạng thái (State Management): Trong các ứng dụng thực tế lớn, thay vì dùng setState hay FutureBuilder ở mọi nơi, người ta sẽ kết hợp gọi API với các công cụ quản lý trạng thái như Provider, Riverpod, BLoC hoặc GetX để cấu trúc code gọn gàng, tách biệt phần Giao diện (UI) và phần Xử lý dữ liệu (Logic) ra khỏi nhau.

5. Lời kết

Kết nối REST API trong Flutter ban đầu có thể trông hơi phức tạp vì có liên quan đến các khái niệm bất đồng bộ (async/await) và chuyển đổi JSON. Tuy nhiên, khi bạn đã làm quen với mô hình cơ bản (Tạo Model -> Viết hàm gọi HTTP -> Dùng FutureBuilder hiển thị), bạn sẽ thấy nó cực kỳ logic và mạnh mẽ.

Hi vọng bài viết này đã giúp bạn hiểu rõ bản chất của API và tự tin triển khai thành công tính năng này vào ứng dụng Flutter của mình. Hãy thử thay đổi đường dẫn API trong ví dụ trên bằng một API thời tiết hay giá coin để thấy sự thú vị nhé. Chúc các bạn code vui vẻ!

Lập trình cho thiết bị di động, lập trình Android

Trong thời đại số, khi mà số lượng thiết bị di động thông minh đã vượt mức hàng tỷ thiết bị trên toàn cầu, lập trình di động (Mobile App Development) đã trở thành một trong những "mảnh đất vàng" màu mỡ nhất cho dân Công nghệ Thông tin. Dù bạn muốn đầu quân cho các tập đoàn công nghệ lớn hay tự mình xây dựng một startup, kỹ năng lập trình mobile chắc chắn sẽ là một lợi thế cạnh tranh cực lớn.

Hôm nay, chúng ta hãy cùng nhau đi sâu vào bức tranh tổng quan của việc phát triển ứng dụng di động, đặc biệt là "ông lớn" Lập trình Android, đồng thời mình sẽ chia sẻ với các bạn những nguồn tài liệu "gối đầu giường" không thể bỏ qua nhé!

Lập trình cho thiết bị di động, lập trình Android


1. Tổng quan về phát triển ứng dụng cho thiết bị di động

Lập trình ứng dụng di động là quá trình tạo ra các phần mềm chạy trên thiết bị di động như smartphone hay máy tính bảng. Hiện nay, thế giới lập trình mobile được chia thành các xu hướng chính:

  • Native Development (Lập trình gốc): Xây dựng ứng dụng riêng biệt cho từng hệ điều hành. Ví dụ: Dùng Java hoặc Kotlin cho Android; dùng Swift hoặc Objective-C cho iOS. Ứng dụng Native luôn mang lại hiệu suất cao nhất và trải nghiệm người dùng mượt mà nhất.
  • Cross-Platform (Đa nền tảng): Code một lần, chạy trên cả hai nền tảng. Các framework nổi đình nổi đám hiện nay có thể kể đến như Flutter (dùng ngôn ngữ Dart) của Google hay React Native (dùng JavaScript) của Facebook.
  • Hybrid Development (Ứng dụng lai): Kết hợp giữa công nghệ web (HTML, CSS, JavaScript) đóng gói trong một "container" Native để chạy trên thiết bị di động (như Ionic, Cordova).

2. Lập trình Mobile với Android – Bắt đầu từ đâu?

Android là hệ điều hành mã nguồn mở dựa trên nhân Linux, hiện đang thống trị thị trường di động toàn cầu. Để làm chủ lập trình Android, đây là những viên gạch nền tảng bạn cần nắm vững:

Về ngôn ngữ và công cụ: Bạn có thể bắt đầu bằng ngôn ngữ Java truyền thống. Tuy nhiên, hiện tại Google đang khuyến khích lập trình viên chuyển sang Kotlin với cú pháp ngắn gọn, an toàn hơn và được thiết kế theo hướng "Kotlin-first". Môi trường phát triển tích hợp (IDE) chính thức và mạnh mẽ nhất mà bạn phải cài đặt chính là Android Studio.

4 Thành phần cốt lõi của một ứng dụng Android: Mọi ứng dụng Android đều được xây dựng dựa trên 4 khối kiến trúc cơ bản (Application Components):

  1. Activity: Đại diện cho một màn hình giao diện (UI) mà người dùng tương tác trực tiếp. Mỗi ứng dụng có thể có nhiều Activity và chúng có vòng đời (Lifecycle) riêng biệt như onCreate(), onStart(), onPause()....
  2. Service: Thành phần chuyên xử lý các tác vụ chạy ngầm (background) mà không cần giao diện người dùng, ví dụ như phát nhạc hay tải file.
  3. Broadcast Receiver: Giúp ứng dụng "lắng nghe" và phản hồi lại các thông báo từ hệ thống hoặc ứng dụng khác (ví dụ: pin yếu, có tin nhắn SMS mới).
  4. Content Provider: Quản lý và cung cấp cách thức để chia sẻ dữ liệu giữa các ứng dụng với nhau một cách an toàn.

Ngoài ra, bạn cũng sẽ phải làm quen với Intent – "sợi dây" kết nối và truyền dữ liệu giữa các thành phần trên.

3. Top 5 Nguồn Tài liệu & Website "Must-have" cho sinh viên IT

Để tự học lập trình Android hiệu quả, việc chọn đúng tài liệu là vô cùng quan trọng. Dưới đây là 5 nguồn tài nguyên mà bất cứ sinh viên CNTT nào cũng nên lưu lại:

1. Kho Ebook và Bài giảng miễn phí (Cực kỳ quan trọng)

  • Link truy cập: Tải bài giảng và Ebook Lập trình Android tại đây
  • Review: Đây là kho lưu trữ tuyệt vời dành cho sinh viên. Tại link này, bạn có thể dễ dàng tìm kiếm và tải về các cuốn sách điện tử, giáo trình lý thuyết và bài giảng thực hành môn Lập trình di động Android hoàn toàn miễn phí. Rất thích hợp để ôn thi và làm đồ án!

2. Tài liệu chính thức từ Google (Android Developers)

  • Website: developer.android.com
  • Review: Không đâu chuẩn xác bằng "chính chủ". Trang web này cung cấp các khóa học từ cơ bản đến nâng cao, hướng dẫn sử dụng Android Studio, cách dùng Jetpack Compose để thiết kế UI, và các tiêu chuẩn bảo mật, kiến trúc ứng dụng (App Architecture) mới nhất.

3. GeeksforGeeks – Chuyên mục Android Tutorial

  • Website: geeksforgeeks.org
  • Review: Trang web huyền thoại của dân IT. Chuyên mục Android của GeeksforGeeks cung cấp lộ trình (roadmap) rất rõ ràng, giải thích chi tiết về Layouts (LinearLayout, ConstraintLayout...), TextView, Button, và các ví dụ thực hành cắt ghép giao diện cực kỳ dễ hiểu.

4. TutorialsPoint – Học lập trình qua từng bước (Step-by-step)

  • Website: tutorialspoint.com
  • Review: Nếu bạn thích phong cách học cầm tay chỉ việc, TutorialsPoint có đầy đủ các bài hướng dẫn từ việc thiết lập môi trường (JDK, SDK), cấu trúc thư mục project, cho đến việc tích hợp Google Maps hay quản lý SQLite Database. Ngoài Android Native, trang này cũng có giáo trình chi tiết cho cả Flutter và React Native.

5. Sách "Professional Android Application Development" (Reto Meier)

  • Review: Một trong những cuốn sách kinh điển hướng dẫn lập trình Android thực tế. Sách đi sâu vào các kỹ thuật nâng cao như làm việc với phần cứng (Camera, GPS, cảm biến), quản lý mạng, Service chạy nền và thiết kế giao diện tùy chỉnh. Bạn có thể tìm bản mềm của cuốn sách này trên mạng để nghiên cứu thêm chuyên sâu.

Lời kết

Học lập trình Android không phải là con đường trải đầy hoa hồng vì công nghệ luôn thay đổi mỗi ngày. Tuy nhiên, chỉ cần bạn nắm vững kiến trúc hệ thống, hiểu rõ vòng đời ứng dụng và kiên trì thực hành qua các dự án nhỏ (như làm app To-do list, App Thời tiết, App Tin tức...), bạn chắc chắn sẽ thành công.

Đừng quên lưu lại link kho tài liệu Android ở trên để phục vụ cho việc làm đồ án trên trường nhé. Chúc các bạn sinh viên IT code "sạch", ít bug và sớm trở thành những Android Developer thực thụ!

Nếu thấy bài viết hữu ích, hãy share cho bạn bè cùng lớp nhé!

Hướng dẫn tự học lập trình Flutter với Dart trên Android Sutudio

1. Tổng quan về Flutter

Flutter là một bộ công cụ giao diện người dùng (UI framework) mã nguồn mở do Google tạo ra và ra mắt vào năm 2017. Điểm "ăn tiền" lớn nhất của Flutter là khả năng phát triển ứng dụng đa nền tảng (Cross-platform) chỉ với một mã nguồn (single codebase).

Thay vì phải học Java/Kotlin để viết app cho Android, rồi lại phải học Swift/Objective-C để viết app cho iOS, bạn chỉ cần học Flutter là có thể build app chạy mượt mà trên cả 2 hệ điều hành này,. Hiện nay, Flutter còn hỗ trợ build ra cả Web và các ứng dụng Desktop (Windows, macOS, Linux).

Flutter không sử dụng các thành phần giao diện mặc định của hệ điều hành mà tự vẽ lại mọi pixel trên màn hình bằng engine đồ họa riêng (Skia/Impeller), giúp ứng dụng có hiệu năng cực kỳ ấn tượng (có thể đạt 60-120fps) và giao diện nhất quán trên mọi thiết bị,. Rất nhiều ông lớn đang sử dụng Flutter như: chính Google (Google Pay), Alibaba, BMW, Toyota, v.v.,.

Hướng dẫn tự học lập trình Flutter với Dart trên Android Sutudio
Hướng dẫn tự học lập trình Flutter với Dart trên Android Sutudio (nguồn NotebookLM)


2. Giới thiệu ngôn ngữ lập trình Dart

Để học Flutter, bạn bắt buộc phải làm quen với ngôn ngữ lập trình Dart. Đây cũng là một ngôn ngữ do Google phát triển, được tối ưu hóa riêng cho việc xây dựng giao diện người dùng.

Nếu bạn đã từng học C++, C# hay Java ở trường đại học, bạn sẽ thấy Dart cực kỳ "quen mặt". Dart là ngôn ngữ kiểu tĩnh (statically typed), hỗ trợ lập trình hướng đối tượng (OOP) hoàn chỉnh với các khái niệm quen thuộc như Class, Interface, Mixin, Kế thừa....

Một số điểm thú vị của Dart khi kết hợp với Flutter:

  • Hot Reload: Dart hỗ trợ biên dịch Just-In-Time (JIT) trong quá trình phát triển. Điều này cho phép tính năng "Hot Reload" hoạt động – bạn vừa sửa code, lưu lại là giao diện app trên điện thoại cập nhật ngay lập tức trong chưa tới 1 giây mà không cần khởi động lại app,.
  • Null Safety: Dart áp dụng cơ chế an toàn null (Sound Null Safety), giúp bạn tránh được lỗi "NullPointerException" khét tiếng, làm cho code an toàn và ít lỗi vặt hơn,.

3. Các bước cài đặt Flutter trên Android Studio

Để lập trình Flutter, bạn cần cài đặt Flutter SDK và một IDE (môi trường lập trình). Android Studio hoặc Visual Studio Code là 2 lựa chọn phổ biến nhất,. Ở đây, chúng ta sẽ dùng Android Studio vì nó tích hợp sẵn các công cụ máy ảo rất tiện lợi.

Bước 1: Tải và cài đặt Flutter SDK

  • Truy cập link tải chính thức: Tải Flutter SDK.
  • Tải file .zip dành cho Windows (hoặc macOS/Linux tùy máy bạn).
  • Giải nén thư mục (Lưu ý: Không nên để trong C:\Program Files, hãy để ở nơi dễ truy cập như C:\src\flutter).
  • Cấu hình biến môi trường (PATH): Mở Environment Variables trên Windows, tìm biến Path, thêm đường dẫn C:\src\flutter\bin vào để máy tính nhận diện được lệnh flutter.

Bước 2: Tải và cài đặt Android Studio

  • Truy cập link tải: Tải Android Studio.
  • Cài đặt bình thường (cứ bấm Next và chọn Standard Installation). Đảm bảo Android SDK và Android Emulator được tick chọn để cài đặt.

Bước 3: Cài đặt Plugin Flutter trong Android Studio

  • Mở Android Studio lên.
  • Vào mục Plugins (hoặc File -> Settings -> Plugins),.
  • Tìm kiếm từ khóa Flutter và nhấn Install. Nó sẽ yêu cầu bạn cài thêm plugin Dart, bạn cứ chọn đồng ý.
  • Khởi động lại (Restart) Android Studio.

Bước 4: Kiểm tra cài đặt

  • Mở Command Prompt (CMD) hoặc Terminal, gõ lệnh: flutter doctor,.
  • Công cụ này sẽ kiểm tra xem bạn còn thiếu gì không. Nếu thấy tất cả đều có dấu tích xanh [✓], xin chúc mừng, bạn đã cài đặt thành công!. (Nếu có lỗi yêu cầu chấp nhận Android License, chỉ cần gõ flutter doctor --android-licenses và bấm 'y' cho đến hết,).

4. Các bước tạo và chạy 1 ứng dụng đầu tiên

Bây giờ chúng ta sẽ làm ứng dụng "Hello World" huyền thoại nhé:

Bước 1: Tạo project

  • Mở Android Studio, chọn New Flutter Project,.
  • Đảm bảo đường dẫn "Flutter SDK path" trỏ đúng vào thư mục Flutter bạn đã giải nén (VD: C:\src\flutter).
  • Đặt tên project (lưu ý viết chữ thường và dùng dấu gạch dưới, ví dụ: hello_flutter), sau đó nhấn Finish,.

Bước 2: Xóa code mẫu và viết code mới Flutter sẽ tự sinh ra một thư mục project. Hãy nhớ nguyên tắc: 90% thời gian code của bạn sẽ nằm trong thư mục lib/. Mở file lib/main.dart, xóa hết toàn bộ code có sẵn đi và chép đoạn code cực kỳ đơn giản sau đây vào:

import 'package:flutter/material.dart';

// Hàm main là nơi chương trình bắt đầu chạy
void main() {
  runApp(const MyApp());
}

// Tạo một Widget cơ bản
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text(
            'Hello World - Chào sinh viên IT!',
            style: TextStyle(fontSize: 24, color: Colors.blue),
          ),
        ),
      ),
    );
  }
}

Giải thích code nhanh: Mọi thứ trong Flutter đều là Widget (thành phần giao diện). MaterialApp là khung chứa app, Scaffold cung cấp cấu trúc màn hình cơ bản, Center giúp căn giữa nội dung, và Text dùng để hiển thị chữ.

Bước 3: Chạy ứng dụng

  • Bạn có thể cắm điện thoại thật vào máy tính (nhớ bật USB Debugging) hoặc chọn một máy ảo (Emulator) ngay trên thanh công cụ của Android Studio hoặc chạy trực tiếp trên trình duyệt Chrome,.
  • Nhấn nút Run (biểu tượng hình tam giác màu xanh),.
  • Đợi một lát để code biên dịch, và Bùm! Dòng chữ "Hello World" đã hiện lên màn hình điện thoại của bạn.

5. Một số tài liệu tham khảo hữu ích

Để tự học Flutter ở mức cơ bản đến nâng cao, bạn có thể lưu lại các trang web "gối đầu giường" sau:

  1. Trang chủ Flutter (Tiếng Anh): Nơi chứa mọi tài liệu chính thống, chính xác nhất từ Google.
  2. Trang chủ ngôn ngữ Dart (Tiếng Anh): Giúp bạn tra cứu cú pháp và cách hoạt động của Dart.
  3. DartPad (Lập trình trực tuyến): Nếu máy yếu chưa kịp cài đặt IDE, bạn có thể lên đây gõ code Dart/Flutter và xem kết quả ngay trên trình duyệt web.
  4. Học qua series bài viết tiếng Việt (Viblo / Cafedev / 200Lab): Rất nhiều lập trình viên Việt Nam chia sẻ các bài hướng dẫn chi tiết từ biến, hàm cho đến cách chia bố cục màn hình.
  5. Kho mã nguồn mở (Pub.dev): Khi bạn cần dùng thư viện bên ngoài (như gọi API, lưu dữ liệu), hãy lên đây tìm kiếm.

Chúc các bạn sinh viên IT có những giờ phút "code dạo" thật thú vị và sớm hoàn thành được những chiếc app xịn xò của riêng mình nhé!

Nếu bạn muốn có nguồn thu tự động, hoàn toàn miễn phí và vô cùng đơn giản thì có thể tham khảo app kiếm tiền Honeygain và EarnApp tại đây.

Nguồn NotebookLM

Các Bước Xây Dựng Ứng Dụng Android Trên Android Studio

Ngày nay, phát triển ứng dụng di động là một kỹ năng quan trọng với sinh viên ngành Công nghệ Thông tin (CNTT). Trong bài viết này, mình sẽ hướng dẫn các bạn từng bước xây dựng một ứng dụng Android đơn giản bằng Android Studio, công cụ phát triển phổ biến nhất cho lập trình viên Android.

Hướng Dẫn Sinh Viên Các Bước Xây Dựng Ứng Dụng Android Trên Android Studio


Bước 1: Cài Đặt Android Studio

Đầu tiên, các bạn cần cài đặt Android Studio trên máy tính của mình:

  1. Truy cập trang web chính thức của Android Studio: https://developer.android.com/studio.
  2. Tải xuống và cài đặt Android Studio theo hướng dẫn trên trang.
  3. Sau khi cài đặt, mở Android Studio và thiết lập các thông số cơ bản như tải xuống SDK và các công cụ liên quan.

Bước 2: Tạo Dự Án Mới

Sau khi cài đặt thành công, chúng ta sẽ bắt đầu bằng việc tạo một dự án Android mới:

  1. Mở Android Studio và chọn "New Project".
  2. Chọn mẫu ứng dụng (ví dụ: Empty Activity), sau đó nhấp "Next".
  3. Đặt tên cho ứng dụng của bạn, chọn ngôn ngữ lập trình (thường là Java hoặc Kotlin), rồi bấm "Finish".

Bước 3: Cấu Trúc Dự Án Android

Sau khi tạo dự án, bạn sẽ thấy một cấu trúc thư mục khá phức tạp, bao gồm:

  • Java (hoặc Kotlin): Chứa các tệp mã nguồn cho logic ứng dụng.
  • res: Thư mục chứa tài nguyên như giao diện người dùng (XML), hình ảnh, và các chuỗi văn bản.
  • AndroidManifest.xml: Tệp này chứa thông tin cấu hình chính của ứng dụng.

Bước 4: Thiết Kế Giao Diện Người Dùng (UI)

Android Studio cung cấp một Layout Editor để giúp bạn dễ dàng thiết kế giao diện:

  1. Mở tệp activity_main.xml trong thư mục res/layout.
  2. Sử dụng Component Tree và Palette để kéo thả các thành phần giao diện (như nút bấm, text box, label, v.v.).
  3. Bạn có thể tùy chỉnh các thuộc tính của từng thành phần trong cửa sổ Attributes (màu sắc, kích thước, vị trí, v.v.).

Ví dụ, bạn có thể kéo một TextView và một Button vào màn hình, sau đó đặt thuộc tính để điều chỉnh kích thước và vị trí của chúng.

Bước 5: Viết Mã Lập Trình

Sau khi thiết kế giao diện, bạn sẽ chuyển sang phần mã nguồn để thêm logic cho ứng dụng. Trong tệp MainActivity.java (hoặc MainActivity.kt), bạn có thể viết mã để xử lý sự kiện:

  1. Mở tệp MainActivity.java trong thư mục java/com.example.yourapp.
  2. Tạo đối tượng tham chiếu tới các thành phần UI đã thiết kế (ví dụ: Button hoặc TextView).
  3. Viết mã để xử lý sự kiện như nhấn nút hoặc hiển thị thông báo.

Sau khi viết xong mã, bạn có thể kiểm tra ứng dụng của mình:

  1. Kết nối điện thoại Android qua USB và bật chế độ Developer Mode trên thiết bị.
  2. Trong Android Studio, nhấp vào nút Run (hoặc nhấn Shift + F10) để biên dịch và chạy ứng dụng trên điện thoại thật.
  3. Bạn cũng có thể sử dụng Android Emulator nếu không có thiết bị thật.

Bước 7: Kiểm Tra và Sửa Lỗi (Debugging)

Trong quá trình phát triển, bạn sẽ gặp phải lỗi hoặc sự cố không mong muốn. Android Studio cung cấp nhiều công cụ giúp bạn kiểm tra và sửa lỗi:

  1. Sử dụng Logcat để xem nhật ký ứng dụng và tìm ra nguyên nhân lỗi.
  2. Sử dụng Breakpoint để dừng chương trình tại một điểm nhất định và xem giá trị của các biến tại thời điểm đó.

Bước 8: Tinh Chỉnh và Cải Tiến

Sau khi kiểm tra ứng dụng, bạn có thể tinh chỉnh và cải thiện:

  • Tối ưu hóa giao diện: Điều chỉnh giao diện để thân thiện hơn với người dùng và tối ưu hóa cho các kích thước màn hình khác nhau.
  • Cải thiện hiệu suất: Sử dụng các công cụ như Lint và Memory Profiler để kiểm tra hiệu suất và tối ưu mã nguồn.

Bước 9: Đóng Gói và Phát Hành Ứng Dụng

Khi ứng dụng của bạn hoàn thiện, bạn có thể đóng gói nó thành một tệp APK và phát hành:

  1. Chọn Build > Build Bundle(s) / APK(s) > Build APK(s).
  2. Sau khi hoàn tất, Android Studio sẽ tạo ra một tệp APK để bạn có thể cài đặt trên thiết bị hoặc gửi lên Google Play Store.

Kết Luận

Việc phát triển ứng dụng Android không quá phức tạp nếu bạn biết làm theo các bước cơ bản. Quan trọng là bạn cần kiên nhẫn và thực hành thường xuyên để nâng cao kỹ năng. Android Studio là một công cụ mạnh mẽ, và khi đã quen thuộc với nó, bạn có thể xây dựng những ứng dụng phong phú và chất lượng. Chúc các bạn thành công!

Hướng dẫn lập trình Android Native [Lý thuyết + Ví dụ demo]

Hướng dẫn lập trình Android Native 

Tài liệu gồm 22 bài thực hành và ví dụ demo sử dụng ngôn ngữ lập trình Java với công cụ Android Studio. Hướng dẫn này từng bước giúp bạn làm quen với lập trình Android Native.
    
Hướng dẫn lập trình Android Native [Lý thuyết + Ví dụ demo]

Bài thực hành 1

  1. Bắt đầu với Android cần những gì?
  2. Cài đặt Android Studio trên Windows
  3. Cài đặt Intel® HAXM cho Android Studio
  4. Cấu hình Android Emulator trong Android Studio


Bài thực hành 2 

  1. Tạo dự án Android đầu tiên - Hello Android
  2. Tìm hiểu cấu trúc Project qua các ví dụ đơn giản
  3. Sử dụng các tài sản ảnh và biểu tượng của Android Studio
  4. Device File Explorer


Bài thực hành 3

  1. Bật tính năng USB Debugging trên thiết bị Android
  2. Thiết lập SD Card cho Android Emulator
  3. Làm sao biết số số điện thoại của Android Emulator và thay đổi nó
  4. Làm sao thêm thư viện bên ngoài vào dự án Android trong Android Studio?
  5. Làm sao loại bỏ các quyền đã cho phép trên ứng dụng Android
  6. Làm sao loại bỏ các ứng dụng ra khỏi Android Emulator?


Bài thực hành 4

  1. UI Layouts
  2. LinearLayout
  3. TableLayout
  4. FrameLayout


Bài thực hành 5

  1. Button
  2. ToggleButton
  3. Switch
  4. ImageButton
  5. FloatingActionButton


Bài thực hành 6

  1. CheckBox
  2. RadioGroup và RadioButton
  3. Chip và ChipGroup
  4. Ví dụ với ChipGroup và các Chip Entry


Bài thực hành 7

  1. QuickContactBadge
  2. Space
  3. Toast
  4. Toast tùy biến
  5. SnackBar


Bài thực hành 8

  1. TextView
  2. TextClock
  3. EditText
  4. TextInputLayout
  5. TextWatcher


Bài thực hành 9

  1. Clipboard
  2. Tạo một File Chooser đơn giản trong Android
  3. Tạo một File Finder Dialog đơn giản trong Android
  4. AutoCompleteTextView và MultiAutoCompleteTextView


Bài thực hành 10

  1. ImageView
  2. ImageSwitcher
  3. ScrollView và HorizontalScrollView
  4. WebView


Bài thực hành 11

  1. SeekBar
  2. Dialog
  3. AlertDialog
  4. CharacterPickerDialog
  5. DialogFragment

Bài thực hành 12 

  1. DatePicker
  2. TimePicker
  3. TimePickerDialog
  4. DatePickerDialog


Bài thực hành 13

  1. Chronometer
  2. RatingBar
  3. ProgressBar
  4. Spinner


Bài thực hành 14

  1. OptionMenu
  2. ContextMenu
  3. PopupMenu
  4. Fragments


Bài thực hành 15

  1. ListView
  2. ListView với Checkbox sử dụng ArrayAdapter
  3. GridView
  4. CardView
  5. ViewPager2
  6. StackView


Bài thực hành 16

  1. Camera
  2. MediaPlayer
  3. VideoView
  4. SoundPool
  5. Networking


Bài thực hành 17 

  1. Xử lý JSON trong Android
  2. SharedPreferences
  3. Bộ lưu trữ trong (Internal Storage)
  4. Bộ lưu trữ ngoài (External Storage)


Bài thực hành 18

  1. Intents
  2. Intent tường minh, gọi một Intent khác
  3. Intent không tường minh, mở một URL, gửi một email


Bài thực hành 19

  1. Services
  2. Notifications


Bài thực hành 20

   1. SQLite


Bài thực hành 21

  1. AsyncTask
  2. AsyncTaskLoader


Bài thực hành 22

  1. Google Maps Android API
  2. Văn bản thành lời nói trong Android
  3. Lấy số điện thoại trong Android sử dụng TelephonyManager
  4. SMS
  5. Phone Call
  6. Wifi Scanning

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]

 Tham khảo: o7planning.org 


* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

[Tự học lập trình Android] Bài 6: Tìm hiểu về vòng đời của ứng dụng Android (Application life cycle)

Tìm hiểu về vòng đời của ứng dụng Android (Application life cycle)
1) Applications là gì ?
Mỗi một Android Project khi bạn biên dịch thành công thì sẽ được đóng gói thành tập tin .apk, tập tin .apk được gọi là một ứng dụng (application)
2) Activities là gì ?
- Trong một ứng dụng (application) sẽ có một hoặc nhiều Activity (có thể hiểu như là các màn hình tương tác giống như Form trong VS.Net).
- Mỗi một Activity này sẽ có một vòng đời riêng độc lập hoàn toàn với các Activity khác. Việc hiểu rõ vòng đời của Activity là rất quan trọng trong việc xử lý thông tin.
- Mỗi một Activity muốn được triệu gọi trong ứng dụng thì bắt buộc nó phải được khai báo trong file Manifest.XML
3) Activity Stack là gì?
- Tương tự như các ngôn ngữ lập trình khác, Activity Stack hoạt động theo cơ chế LIFO (Last In Firrst Out)
- Mỗi một Activity mới được mở lên nó sẽ ở bên trên Activity cũ, để trở về Activity thì bạn chỉ cần nhấn nút “Back” để trở về hoặc viết lệnh. Tuy nhiên nếu bạn nhấn nút "Home" rồi thì sẽ không thể dùng nút “Back” để quay lại màn hình cũ được.
Hình 1: Acitivity stack

- Có 2 kiểu mở Activity mới:
  + Mở Activity mới lên làm che khuất toàn bộ Activity cũ (không nhìn thấy Activity cũ): sảy ra sự kiện onPause rồi onStop đối với Activity cũ
  + Mở Activity mới lên làm che khuất một phần Activity cũ (vẫn nhìn thấy Activity cũ): Sảy ra sự kiện onPause với Activity cũ.
- Khi quay trở về Activity cũ thì sau khi thực hiện xong các hàm cần thiết, chắc chắn nó phải gọi hàm onResume để phục hồi lại trạng thái ứng dụng
- Như vậy ta thường lưu lại trạng thái của ứng dụng trong sự kiện onPause và đọc lại trạng thái ứng dụng trong sự kiện onResume
4) Tasks là gì?
- Task là khả năng thực hiện một công việc nào đó giữa các ứng dụng với nhau, cụ thể là các Activity
- Ví dụ bạn đang mở chương trình quản lý BlackList, trong chương trình này cho phép mở danh bạ để đưa vào danh sách đen. Lúc đó chương trình bạn sẽ gọi Activity của ứng dụng danh bạ, sau khi lấy xong lại quay trở về ứng dụng của bạn. Nhớ là 2 ứng dụng này hoàn toàn không liên quan gì tới nhau cả.

Hình 2: Task

5) Life Cycle States là gì?
Với mỗi Activity thường vòng đời có 3 trạng thái sau:
1- Running (đang kích hoạt)
2- Paused (tạm dừng)
3- Stopped (dừng – không phải Destroyed)
Hình 3: Life Cycle 


Trong đó:
1- Running (đang kích hoạt): Khi màn hình là ForeGround (Activity nằm trên cùng ứng dụng và cho phép người sử dụng tương tác)
2- Paused (tạm dừng): Activity bị mất trọng tâm (focus) nhưng mà vẫn nhìn thấy được Activity này (Ví dụ bạn mở một Activity mới lên dưới dạng Dialog). Trường hợp này nó vẫn có khả năng bị hệ thống tự động hủy trong tình huống bộ nhớ quá ít.
3- Stopped (dừng – không phải Destroyed): Activity mất focus và không nhìn thấy được (ví dụ bạn mở một Activity mới lên mà Full màn hình chẳng hạn). Trong trường hợp này nó có thể bị hệ thống hủy bất kỳ tình huống nào.
Hình 4: Application's Lifie cycle

* Như vậy cả Paused hay Stopped đều có khả năng bị Destroyed (hủy) khi bộ nhớ cần cho việc khác ưu tiên hơn.


6. Phân biệt Visible Lifetime và Foreground Lifetime
Hình 5: Phân biệt Visible Lifetime và Foreground Lifetime

- Visible Lifetime:
+ sảy ra từ sau khi gọi onStart => cho tới lúc gọi onStop: trong trường hợp này chúng ta vẫn có thể thấy màn hình Activity (có thể tương tác khi nó là foreground, không tương tác được khi nó không phải foreground như đã giải thích ở trên)

- Foreground Lifetime:
+ Sảy ra từ khi gọi onResume => cho tới lúc gọi onPause: trong suốt thời gian này Activity luôn nằm ở trên cùng và chúng ta có thể tương tác được với nó
7. Ví dụ demo
- Bạn tạo một ứng dụng tên là : CheckLifeTimeCycle với cấu trúc như hình dưới đây:

Hình 6: Project
- Double Click vào MainActivity.java:
- Sau đó bấm chuột phải vào màn hình Coding/ chọn Source/ chọn Override / Implement Methods… :

Hình 7

- Màn hình Override / Impement Methods sẽ hiển thị ra như bên dưới, chọn các hàm: onStart,onRestart, onResume, onPause, onStop, onDestroy…: rồi bấm OK


Hình 8

Coding:

Hình 9

Ở trên bạn thấy dòng lệnh trong hàm onResume:
protected void onResume() {
Toast.makeText(this,”onResume”, Toast.LENGTH_SHORT)
.show();
super.onResume();
}

Thực thi (run)
- Bây giờ bạn chạy ứng dụng vào Máy ảo Android và thực hiện một số thao tác: Mở một ứng dụng khác, mở Menu, nhấn nút Back, nhấn nút Home … quan sát hiện tượng bạn sẽ hiểu được cách vận hành các hành này.
- Bạn cần phải hiểu rõ về Life time cycle để giúp ích cho việc quản lý ứng dụng

*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]


-----------------------------------------
Xem thêm bài và ví dụ khác:

 

* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

[Tự học lập trình Android] Bài 4: Xây dựng ứng dụng Android đầu tiên - "Hello World"

Xây dựng ứng dụng Android đầu tiên - In ra màn hình dòng chữ "Hello World"

1. Tại một ứng dụng Android mới [Tham khảo hướng dẫn trong Bài 1]


Click nút Next bạn sẽ đến màn hình Project:


2. Cấu trúc của ứng dụng Android
Trước khi bạn chạy ứng dụng, chúng ta đi tìm hiểu một vài thư mục và tập tin trong dự án Android:


Đặc tả các thư mục và file:


S.N.
Đặc tả các thư mục và file
1
src
Này chứa các tập tin nguồn java. Theo mặc định, nó bao gồm một tập tin MainActivity.javasource có một lớp hoạt động chạy khi ứng dụng của bạn được đưa ra bằng cách sử dụng biểu tượng ứng dụng.
2
gen
gen chứa các tập tin R., Một tập tin trình biên dịch tạo ra tham chiếu tất cả các tài nguyên có trong dự án của bạn. Bạn không nên thay đổi tập tin này.
3
bin
Thư mục này chứa các tập tin Android gói. Apk được xây dựng bởi các ADT trong quá trình xây dựng và mọi thứ khác cần thiết để chạy một ứng dụng Android.
4
res / drawable-hdpi
Đây là một thư mục cho các đối tượng thể vẽ được thiết kế cho màn hình có mật độ cao.
5
res / layout
Đây là một thư mục cho các tập tin xác định giao diện người dùng của ứng dụng của bạn.
6
res/values
Đây là một thư mục cho các tập tin XML khác nhau có chứa một tập hợp các nguồn lực, chẳng hạn như dây và màu sắc các định nghĩa.
7
AndroidManifest.xml
Đây là biểu hiện tập tin trong đó mô tả các đặc điểm cơ bản của các ứng dụng và xác định mỗi thành phần của nó.


* File MainActivity

package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
* File Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.helloworld"
   android:versionCode="1"
   android:versionName="1.0" >
   <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="15" />
   <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
       <activity
           android:name=".MainActivity"
           android:label="@string/title_activity_main" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>
   </application>
</manifest>
* File String

<resources>
    <string name="app_name">HelloWorld</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
</resources>

* File R

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.example.helloworld;

public final class R {
    public static final class attr {
    }
    public static final class dimen {
        public static final int padding_large=0x7f040002;
        public static final int padding_medium=0x7f040001;
        public static final int padding_small=0x7f040000;
    }
    public static final class drawable {
        public static final int ic_action_search=0x7f020000;
        public static final int ic_launcher=0x7f020001;
    }
    public static final class id {
        public static final int menu_settings=0x7f080000;
    }
    public static final class layout {
        public static final int activity_main=0x7f030000;
    }
    public static final class menu {
        public static final int activity_main=0x7f070000;
    }
    public static final class string {
        public static final int app_name=0x7f050000;
        public static final int hello_world=0x7f050001;
        public static final int menu_settings=0x7f050002;
        public static final int title_activity_main=0x7f050003;
    }
    public static final class style {
        public static final int AppTheme=0x7f060000;
    }
}

* File Layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent" >

   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerHorizontal="true"
       android:layout_centerVertical="true"
       android:padding="@dimen/padding_medium"
       android:text="@string/hello_world"
       tools:context=".MainActivity" />

</RelativeLayout>

* Chạy ứng dụng (RUN)


>> Clip hướng dẫn tạo Project ứng dụng mới

-


*******

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Giáo trình: Lập Trình Android [Click để xem]

# Khoá học online:  Lập trình Android toàn tập [Click để xem]

-----------------------------------------
Xem thêm bài và ví dụ khác:

 

* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

Categories

AI (23) AI programming (1) ASP (1) Android (32) Assembly (17) Biểu diễn thuật toán (1) Bubble-Sort (1) Bài giảng (2) Bài giảng lập trình C và Cpp (21) Bài viết hay (111) Bản đồ tư duy (1) C Plus Plus (102) C/C++ (16) CDSL phân tán (1) CSS (2) Cơ sở dữ liệu (11) Danh ngôn lập trình (1) Datamining (4) Genetic Algorithm (1) Giáo trình (3) Giải thuật tiến hóa - thuật toán di truyền (2) Google App Engine (2) Góc học tập (34) HTML (1) Hướng dẫn sử dụng Emu8086 (1) Học lập trình (133) Học lập trình C và CPP qua ví dụ (17) Java (54) Java Căn bản (6) JavaScript (5) Kỹ năng đọc hiệu quả (1) Kỹ thuật lập trình (16) Kỹ thuật đồ họa máy tính (10) Lý thuyết Cơ sở dữ liệu (2) Lý thuyết đồ thị (10) Lập trình Cơ sở dữ liệu (2) Lập trình Python (2) Lập trình căn bản (8) Lập trình hướng đối tượng với Java (7) Lập trình mobile (9) Lập trình mạng (6) Lập trình nhúng (1) Lập trình trí tuệ nhân tạo (2) ML (1) MS Access (1) Machine learning (6) Mạng máy tính (1) Mẹo tìm kiếm trên Google (1) Nghiên cứu khoa học (5) Ngôn ngữ lập trình (2) Những cuốn sách hay mà bạn nên đọc khi còn trẻ (1) Pascal (3) Phương pháp tính toán tối ưu (2) Phương pháp tối ưu (2) Quản lý dự án CNTT (1) SQL (5) Swift (9) Sách hay (4) Thiết kế Web (2) Thuật toán (50) Thuật toán Sắp Xếp -Sort (9) Thuật toán Tìm kiếm - Search (5) Thuật toán di truyền (4) Thực hành Android (2) Tin học văn phòng (5) Tiện ích máy tính (2) Toán rời rạc (12) Trí tuệ nhân tạo (24) Tài liệu tham khảo (3) Tìm hiểu Blockchain (2) Tự học Android (3) Tự học Android qua ví dụ (1) Tự học JavaScript (1) Tự học lập trình (9) Tự học lập trình Android (17) Tự học lập trình C và CPP (14) Tự học lập trình java qua các ví dụ (8) XML (1) blockchain (2) bài giảng quản lý dự án CNTT (1) bài tập java (3) bài tập lập trình (4) cấu trúc dữ liệu giải thuật (15) hướng dẫn viết báo (1) học lập trình Java (11) học máy (7) hợp ngữ (8) lập trình viên (5) phưng pháp đơn hình (2) thuật toán AI (2) tài liệu CNTT miễn phí (2) tính toán tối ưu (1) tự học lập trình iOS (8) tự học lập trình python (1) ví dụ Assembly (1) Đại số gia tử và ứng dụng (1) Đồ họa (4)