Chương trình Android đầu tiên: Giải phương trình bậc 2


Cách đây ít ngày, Google đã đưa ra bộ công cụ phát triển phần mềm cho Android (Android SDK), một nền tảng mới cho các dòng máy di động. Android là một nền tảng hoàn chỉnh dựa trên hệ điều hành Linux (kernel 2.6), các ứng dụng chạy trên máy ảo Java – phiên bản được thiết kế cho các dòng máy di động có tên Dalvik.

Các tính năng mà Android hỗ trợ rất rộng, bao gồm đồ họa 2D, 3D (dựa trên OPENGLES), khả năng định vị (hiện chỉ dùng GPS), Bluetooth, EDGE, 3G, WiFi, hỗ trợ thoại GSM, dữ liệu có thể được lưu trữ trong cơ sở dữ liệu SQLLite… tất nhiên các thiết bị hỗ trợ Android sẽ không do Google sản xuất, và một số tính năng nâng cao như Wifi, GPS, 3D hardware accelerator… sẽ phụ thuộc vào từng dòng thiết bị cụ thể.

Một tin vui cho các lập trình viên là các bước phát triển ứng dụng trên Android rất đơn giản, với sự hỗ trợ của nhiều thư viện có sẵn, mô hình lập trình khá sáng sủa, cùng với IDE Eclipse, đến thời điểm hiện tại thì bộ tài liệu của nó còn khá sơ sài, đặc biệt là về API. Tuy nhiên, đối với những người đã thành thạo Java, đặc biệt là đã từng xây dựng các ứng dụng cho di động thì việc tiếp cận rất dễ dàng.

Địa chỉ chính thức của Android hiện tại là: http://code.google.com/android/

Sau khi đọc qua tài liệu về Android, bạn có thể theo hướng dẫn của nó để tải về bộ SDK, Eclipse và cấu hình, cài đặt các thành phần liên quan. Tôi đã thử viết một chương trình cực kỳ phức tạp, đó là chương trình giải phương trình bậc 2 :D. Thật đáng kinh ngạc, chỉ sau ít phút, tôi đã có ngay một chương trình để chạy trên thiết bị Android.

Trước khi thử viết chương trình, bạn nên đọc qua tài liệu của nó, tối thiểu bạn phải có khả năng tạo một bộ khung chương trình trong Eclipse, sau đó hãy thay nội dung của hai file main.xml và GPTB2.java như sau (dự án có tên GPTB2, tên lớp activity chính cũng đặt là GPTB2.java)

<?xml version=1.0 encoding=utf-8 ?>

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation=vertical android:layout_width=fill_parent android:layout_height=fill_parent>

<TextView android:layout_width=fill_parent android:layout_height=wrap_content android:text=Giải phương trình bậc 2 />

<EditText id=@+id/a android:layout_width=300pt android:layout_height=80pt android:numeric=true />

<EditText id=@+id/b android:layout_width=300pt android:layout_height=80pt android:numeric=true />

<EditText id=@+id/c android:layout_width=300pt android:layout_height=80pt android:numeric=true />

<Button id=@+id/calculate android:layout_width=250pt android:layout_height=80pt android:text=Calculate />

<TextView id=@+id/result android:layout_width=fill_parent android:layout_height=fill_parent />

</LinearLayout>

Tiếp theo là file GPTB2.java

package com.daohainam.ptb2;

import android.app.Activity;

import android.os.Bundle;

import android.widget.*;

import android.view.*;

public class PTB2 extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

final Button button = (Button) findViewById(R.id.calculate);

final TextView result = (TextView) findViewById(R.id.result);

button.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

String sa = ((EditText) findViewById(R.id.a)).getText().toString();

String sb = ((EditText) findViewById(R.id.b)).getText().toString();

String sc = ((EditText) findViewById(R.id.c)).getText().toString();

try

{

double a = Double.parseDouble(sa);

double b = Double.parseDouble(sb);

double c = Double.parseDouble(sc);

if (a == 0)

{

result.setText(“Phương trình bậc I: “);

if (b == 0)

{

if (c == 0)

result.setText(result.getText() + “Phương trình có vô số nghiệm”);

else

result.setText(result.getText() + “Phương trình vô nghiệm”);

}

else

{

result.setText(result.getText() + “x = “ + (-c/b));

}

}

else

{

double delta = b*b – 4*a*c;

if (delta < 0.0)

{

result.setText(“Phương trình vô nghiệm\n”);

}

else

if (delta == 0)

{

result.setText(“Phương trình có nghiệm kép = “ + (-b/(2*a)));

}

else

{

double delta_sqrt = Math.sqrt(delta);

result.setText(“x1 = “ + ((b*b + delta_sqrt)/(2 * a)) + “\n” + “x2 = “ + ((b*b – delta_sqrt)/(2 * a)));

}

}

} catch (Exception ex)

{

result.setText(ex.toString());

}

}

});

}

}

Vậy là xong, khi chạy bạn sẽ có thể thấy giao diện chương trình như sau:

Nhập các giá trị cần thiết và nhấn vào nút Calculate để xem kết quả.

Bạn cũng có thể download toàn bộ dự án tại đây (mã nguồn này được xây dựng dựa trên bản SDK đầu tiên)

Cập nhật: Mã nguồn tại đây được xây dựng dựa trên bản SDK 1.5r2.

Giao diện

21 thoughts on “Chương trình Android đầu tiên: Giải phương trình bậc 2

  1. Mình rất thích cái này và cũng đang tìm hiểu về nó nhưng còn gà về lập trình quá nên chưa biết bắt đầu từ đâu ( vừa đỗ xong đại học bây giờ mới được sờ đến cái máy vi tính..)bạn có thể chỉ cho mình cách bắt đầu được không ?Nên học những cái nào mới có thể viết được chương trình trên Android
    Thanks

  2. Trước khi học Android, bạn nên học qua Java, như vậy sẽ dễ dàng nắm bắt các khái niệm, kiến thức về nền tảng này. Khi đã thành thạo ngôn ngữ Java cũng như các thành phần bên dưới, việc chuyển sang viết các ứng dụng Android là tương đối đơn giản.

  3. Cảm ơn bạn ! Chờ mãi mới thấy hồi âm ^_^
    Bạn có thể chỉ cho mình thật chi tiết được không (chứ nói thế này mình cũng chịu )?
    Tiện cho mình xin 1 ít tài liệu về java (Mới học nên chưa biết gì cả mong bạn thông cảm )
    Thanks

  4. Chà, chi tiết thế nào nhỉ ??? 🙂
    Bạn có thể tìm một quyển sách Java cơ bản nào đó, rồi đọc từng bài, và tự tay làm lại các ví dụ của nó. Sau khi đọc xong, phải đảm bảo là bạn có thể làm lại tất cả các ví dụ mà không cần nhìn sách (tất nhiên vẫn có thể tham khảo API documentation).

    Còn ebook thì mình có nhiều, nhưng đều là tiếng Anh, mình sẽ upload từ từ lên.

  5. Trời Thầy giáo không up sách lên học trò học kiểu gì đây !
    Tìm được nhiều tài liệu quá ,hoa cả mắt nên tốt nhất là cứ mượn tài liệu của bạn ^_^
    Thanks

  6. hi Nam,

    bạn có thể upload mấy cái ebook về Android của bạn lên RapidShare or Mediafire chia sẽ với mình không?
    Mình cũng rất thích thú và đang học về Android.
    Hi vọng là sẽ có nhiều thời gian chia sẽ kinh nghiệm với nhau.

    -LD

  7. Mình cũng thử đánh bài này của bạn để chạy, tuy nhiên có vấn đề là

    + tại file main.xml: 3 Phần EditText của mình báo lỗi là (boolean types not allowed (at ‘numeric’ with value ‘true’))

    + Còn file PTB2.java thì nó báo lỗi chỗ R.id.calculator

    Mình nghĩ chắc chưa cấu hình được trong file xml nên các tham số chưa được đưa vào file R.java vì vậy nó mới báo lỗi ở đó

    Rất mong bạn giúp mình ^^

    Thanks a lot

  8. Mình đã sửa được lỗi trên rồi và đã chạy. Tuy nhiên, không hiểu là giờ có lỗi gì mà nó bảo trên emulator là

    “The Application Giai phuong trinh bac 2 (process com.example.gptb2) has stopped unexpectedly. Please try again”

    Rất mong mọi người giúp đỡ (nhất là chủ topic :D)

  9. Hi bạn, có lẽ chương trình này không tương thích với phiên bản mới của Android.
    Thường thì nếu nó có lỗi thì sẽ hiện thông báo trong console, bạn xem giúp nó báo gì nhé.

  10. Mình thấy console thông báo bình thường

    [2009-07-15 23:04:48 – GPTB2] HOME is up on device ’emulator-5554′
    [2009-07-15 23:04:48 – GPTB2] Uploading GPTB2.apk onto device ’emulator-5554′
    [2009-07-15 23:04:48 – GPTB2] Installing GPTB2.apk…
    [2009-07-15 23:05:11 – GPTB2] Application already exists. Attempting to re-install instead…
    [2009-07-15 23:05:20 – GPTB2] Success!
    [2009-07-15 23:05:21 – GPTB2] Starting activity com.example.gptb2.GPTB2 on device
    [2009-07-15 23:05:25 – GPTB2] ActivityManager: Starting: Intent { comp={com.example.gptb2/com.example.gptb2.GPTB2} }

    Không hề có điều gì bất thường. Vậy mà nó vẫn thông báo vậy

    P/S: Mình dùng bản 1.5 bạn nhé. Không biết chủ topic dùng bản gì :((

  11. Hờ hờ, cái này viết từ lâu rồi, và được viết trên phiên bản đầu tiên của Android. 😀

  12. Đã cập nhật lại mã nguồn cho phiên bản SDK 1.5 r2.

  13. Chào bạn mình gặp hiện tượng là viết xong ứng dụng rồi cho chạy trên emulator nó cứ báo lỗi “The application has stoped unexpectedly.Please try again”
    Mong bạn có nhiều kinh nghiệm hãy giúp mình. Mình đang làm đề tài Niên luận bằng công nghệ này

  14. file main.xml của bạn sai rồi.bạn nên kiểm tra lại.bạn viết không đúng cú pháp

  15. Oạch, đang có hứng với Android, vào trang developer của nó thấy IDE Ecllipse là biết dính ngay đến java rồi. Chán cực 🙂

    Để xem thế nào đã 🙂

  16. nếu có hứng thú với phát triển phần mềm cho mobile thì Android cũng là một lựa chọn tốt, ngoài ra cũng có thể tìm hiểu thêm Qt hoặc iPhone (mình mù tịt :p)

  17. Chao ban, minh dang lam do an I ve android. Nhung hien tai minh chua biet ty gi ve no. Minh co the viet chuong trinh giai ptb2 nhu ban va hieu code/. Nhung van de xu ly su kien thi minh chiu. Ban co the quay video project ban lam duoc khong? Minh chan thanh cam on ban

  18. Chào bạn, rất tiếc tôi không thể giúp được, mong bạn thông cảm.

  19. anh oi .. ko có kiểu float. làm sao nhập được, a b c là số âm

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s