• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[Basic4Android] Bài 35- Tự làm một máy chủ dịch vụ Web

Lập trình cho Android Phone

Moderator: tummosoft

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

[Basic4Android] Bài 35- Tự làm một máy chủ dịch vụ Web

Postby tummosoft » Fri 12/09/2014 3:49 pm

Như bạn tungbt đã thử test code kết nối MySQL database sử dụng PHP web service theo bài (viewtopic.php?f=70&t=29496) nhưng hay gặp lỗi.

Sau khi tham khảo một số bài trên diễn đàn Basic4Android mình thấy cách dưới đây dễ dùng và đã test thành công.

Ví dụ này vẫn sử dụng PHP web service, thông qua các PHP Script ta xuất dữ liệu dưới dạng mãng JSON.

1 - Ví dụ ta có một script có tên "user.php", lấy dữ liệu từ table: tb_user và export ra kiểu JSON như sau:

  1. <?php      
  2.      $conn = mysql_connect ("localhost", "root", "123456")
  3.      or die ("Could not connect to MySQL Database");
  4.      mysql_select_db("viettruyen", $conn);  
  5. mysql_query("SET CHARACTER SET utf8");
  6. mysql_query("SET NAMES 'utf8'");
  7.  
  8. $q = mysql_query("SELECT tb_user_name, tb_user_fullname FROM tb_user");
  9.         $rows = array();
  10.         while($r = mysql_fetch_assoc($q))
  11.         {
  12.             $rows[] = $r;
  13.         }
  14.         print json_encode($rows);
  15.        
  16. mysql_close($conn);
  17. ?>


Sau khi thực thi, kết quả trả về kiểu JSON có dạng như sau:

[text][{"tb_user_name":"admin","tb_user_fullname":"Qu\u1ea3n tr\u1ecb vi\u00ean"},{"tb_user_name":"test2","tb_user_fullname":"test2"},{"tb_user_name":"test2","tb_user_fullname":"test2"},{"tb_user_name":"Trung_Brian","tb_user_fullname":"Trung Brian"},{"tb_user_name":"cu_thai_my","tb_user_fullname":"C\u00f9 Th\u00e1i M\u1ef9"},{"tb_user_name":"linh_xu","tb_user_fullname":"Linh X\u00f9"},{"tb_user_name":"chuong","tb_user_fullname":"Chu\u00f4ng"},{"tb_user_name":"ngoalong","tb_user_fullname":"Ng\u1ecda Long"},{"tb_user_name":"Rolsy_nguyen","tb_user_fullname":"Rolsy Nguy\u1ec5n"},{"tb_user_name":"limasa","tb_user_fullname":"limasa"}][/text]

2- Kết nối đến PHP web service

- Để kết nối đến máy chủ, ta dùng hai thư viện: Http, HttpUnitils2

[vb]Sub Process_Globals
Dim Connect1 As HttpJob
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout1")

Connect1.Initialize("Connect1", Me)
Connect1.Download("http://10.0.2.2/user.php")
End Sub[/vb]

- Trong bẫy sự kiện sau khi kết nối thành công, ta dùng thư viện JSON để phân tích kết quả trả về

[vb]If Job.Success Then
' Nhận dữ liệu
Dim res As String
res = Job.GetString

' Dùng JSON để parse
Dim parser As JSONParser
parser.Initialize(res)

Select Job.JobName
Case "Connect1"

Dim ListOfPersons As List
ListOfPersons = parser.NextArray 'returns a list with maps

For i = 0 To ListOfPersons.Size - 1
Dim Person As Map
Person = ListOfPersons.Get(i)
Dim UserName As String
Dim UserFullName As String

UserName = Person.Get("tb_user_name")
UserFullName = Person.Get("tb_user_fullname")
ListView1.AddSingleLine2(UserName, UserFullName)

Next

End Select
End if[/vb]

* Toàn bộ code của ví dụ:

[vb]
#Region Project Attributes
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region

#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region

Sub Process_Globals
Dim Connect1 As HttpJob

End Sub

Sub Globals

Private ListView1 As ListView
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout1")

Connect1.Initialize("Connect1", Me)
Connect1.Download("http://10.0.2.2/user.php")
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub JobDone(Job As HttpJob)
ProgressDialogHide
If Job.Success Then
Dim res As String
res = Job.GetString

Dim parser As JSONParser
parser.Initialize(res)

Select Job.JobName
Case "Connect1"

Dim ListOfPersons As List
ListOfPersons = parser.NextArray 'returns a list with maps

For i = 0 To ListOfPersons.Size - 1
Dim Person As Map
Person = ListOfPersons.Get(i)
Dim UserName As String
Dim UserFullName As String

UserName = Person.Get("tb_user_name")
UserFullName = Person.Get("tb_user_fullname")
ListView1.AddSingleLine2(UserName, UserFullName)
Next

End Select
Else
ToastMessageShow("Error: " & Job.ErrorMessage, True)
End If
Job.Release
End Sub[/vb]


:) Tummo Software :D
https://www.tummosoftware.com

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

Re: [Basic4Android] Bài 35- Tự làm một máy chủ dịch vụ Web

Postby tummosoft » Fri 12/09/2014 4:02 pm

Dùng phương thức GET truyền dữ liệu lên Database

Thay vì dùng phương thức POST, thông qua phương thức GET để truyền dữ liệu lên máy chủ.

- Ví dụ 1 php script dùng GET như sau:

<?
$p1 = $_GET["p1"];
$p2 = $_GET["p2"];
print ("I've received $p1 and $p2");
?>

- Tại địa chỉ: http://yourdomain.com/examples/myscript?p1=php&p2=MySql

- Và dùng thư viện Http, HttpUnitils2 để truyền giá trị
Dim php, mysql as string

php = "test1"
mysql = "test2"

Connect1.Initialize("Connect1", Me)
Connect1.PostString("http://www.yourdomain.com/examples/myscript.php", "p1=" & php & "&p2=" & MySql)
:) Tummo Software :D
https://www.tummosoftware.com

User avatar
NoBi
Quản trị
Quản trị
Posts: 961
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

Re: [Basic4Android] Bài 35- Tự làm một máy chủ dịch vụ Web

Postby NoBi » Mon 24/11/2014 9:45 am

Bài viết hướng dẫn sử dụng Restfull Webservice (Android Restful Webservice Tutorial – How to call RESTful webservice in Android) cho android này mình thấy hay và đơn giản. Không biết Basic4Android có dùng thư viện Android Asynchronous Http Client này được không?
:>

User avatar
tummosoft
Điều hành viên
Điều hành viên
Posts: 334
Joined: Mon 19/05/2014 2:23 pm
Has thanked: 7 times
Been thanked: 61 times
Contact:

Re: [Basic4Android] Bài 35- Tự làm một máy chủ dịch vụ Web

Postby tummosoft » Mon 24/11/2014 2:30 pm

Chắc là được bác Nobi à!

Dùng Eclipse làm thêm một thư viện cho B4A để ánh xạ sang thư viện "Android Asynchronous Http Client " và sử dụng.

Cách tạo thư viện bác tham khảo ở đây: viewtopic.php?f=70&t=29886
:) Tummo Software :D
https://www.tummosoftware.com


Return to “Android”

Who is online

Users browsing this forum: No registered users and 1 guest