• 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 20 - Lớp thư viện Http và Httputils2

Lập trình cho Android Phone

Điều hành viên: tummosoft

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 57 time
Liên hệ:

[Basic4Android] Bài 20 - Lớp thư viện Http và Httputils2

Gửi bàigửi bởi tummosoft » T.Hai 04/08/2014 8:15 am

Trong rất nhiều ứng dụng Android, sau khi cài đặt cần kết nối với internet thông qua 1 máy chủ http. Basic4Android có hai hàm dùng để truyền và nhận dữ liệu đến máy chủ web là Http và Httputils2.

- Các thành phần của Httputils2: http://www.basic4ppc.com/android/help/httputils2.html
- Các thành phần của Http: http://www.basic4ppc.com/android/help/http.html

Http là lớp thư viện căn bản, còn Httputils2 được viết lại và tối ưu cho dễ sử dụng hơn.

Ta xem xét ví dụ kết nối đến trang http://www.basic4ppc.com/android/forum/ ... 1374051458, lấy một hình ảnh và thiết lập hình đó làm nền cho ứng dụng.

Lưu ý: Ví dụ này sử dụng thư viện Httputils2

1- Khởi tạo biến và gửi yêu cầu

- Khai báo đối tượng HttpJob: Dim HttpUtils As HttpJob
- Khởi động biến: HttpUtils.Initialize("HttpUtils", Me)
- Gửi yêu cầu đến máy chủ: HttpUtils.Download("http://www.basic4ppc.com/android/forum/data/avatars/m/0/1.jpg?1374051458")

2- Khởi tạo sự kiện để bắt kết quả

  1. Sub JobDone (Job As HttpJob)
  2.     If Job.Success = True Then
  3.         Select Job.JobName
  4.             Case "HttpUtils"
  5.                 'show the downloaded image
  6.                 Activity.SetBackgroundImage(Job.GetBitmap)
  7.         End Select
  8.     Else
  9.         ToastMessageShow("Error: " & Job.ErrorMessage, True)
  10.     End If
  11.     Job.Release
  12. End Sub


3 - Toàn bộ code

  1. Sub Process_Globals
  2.     'These global variables will be declared once when the application starts.
  3.     'These variables can be accessed from all modules.
  4.  
  5. End Sub
  6.  
  7. Sub Globals
  8.     Dim b4a As String
  9.     b4a = "http://www.basic4ppc.com"
  10.     Private Button1 As Button
  11.     Private Label1 As Label
  12.    
  13. End Sub
  14.  
  15. Sub Activity_Create(FirstTime As Boolean)
  16.     Activity.LoadLayout("main")
  17. End Sub
  18.  
  19. Sub Activity_Resume
  20.  
  21. End Sub
  22.  
  23. Sub Activity_Pause (UserClosed As Boolean)
  24.  
  25. End Sub
  26.  
  27. Sub JobDone (Job As HttpJob)
  28.     If Job.Success = True Then
  29.         Select Job.JobName
  30.             Case "HttpUtils"
  31.                 'show the downloaded image
  32.                 Activity.SetBackgroundImage(Job.GetBitmap)
  33.         End Select
  34.     Else
  35.         ToastMessageShow("Error: " & Job.ErrorMessage, True)
  36.     End If
  37.     Job.Release
  38. End Sub
  39.  
  40. Sub Button1_Click
  41.     Dim HttpUtils As HttpJob
  42.    
  43.     HttpUtils.Initialize("HttpUtils", Me)
  44.     HttpUtils.Download("http://www.basic4ppc.com/android/forum/data/avatars/m/0/1.jpg?1374051458")
  45.    
  46.     ToastMessageShow("Vui lòng đợi...", True)
  47. End Sub


:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 57 time
Liên hệ:

Re: [Basic4Android] Bài 20 - Lớp thư viện Http và Httputils2

Gửi bàigửi bởi tummosoft » T.Hai 04/08/2014 8:22 am

Ví dụ tiếp theo, ứng dụng sẽ truy cập đến trang flickr.com, lấy 9 hình ảnh thú vị nhất trong tuần và hiển thị lên ImageView: https://www.flickr.com/explore/interesting/7days/

Hình ảnh

  1. Sub Process_Globals
  2.     Dim MainUrl As String
  3.     MainUrl = "http://www.flickr.com/explore/interesting/7days/"
  4.     Dim HttpClient1 As HttpClient
  5.     Dim MainRequestId As Int
  6.     MainRequestId = 100
  7.    
  8. End Sub
  9.  
  10. Sub Globals
  11.     Dim btnConnect As Button
  12.     Dim ImageView1 As ImageView
  13.     Dim ImageView2 As ImageView
  14.     Dim ImageView3 As ImageView
  15.     Dim ImageView4 As ImageView
  16.     Dim ImageView5 As ImageView
  17.     Dim ImageView6 As ImageView
  18.     Dim ImageView7 As ImageView
  19.     Dim ImageView8 As ImageView
  20.     Dim ImageView9 As ImageView
  21.     Dim ivs() As ImageView
  22. End Sub
  23.  
  24. Sub Activity_Create(FirstTime As Boolean)
  25.     If FirstTime Then
  26.         HttpClient1.Initialize("http")
  27.     End If
  28.     Activity.LoadLayout("1")
  29.     ivs = Array As ImageView(ImageView1, ImageView2, ImageView3, ImageView4, _
  30.         ImageView5, ImageView6, ImageView7, ImageView8, ImageView9)
  31.     ResetImagesBackground
  32. End Sub
  33.  
  34. Sub Activity_Resume
  35.  
  36. End Sub
  37.  
  38. Sub Activity_Pause (UserClosed As Boolean)
  39.  
  40. End Sub
  41. Sub ResetImagesBackground
  42.     For i = 0 To Activity.NumberOfViews - 1
  43.         If Activity.GetView(i) Is ImageView Then Activity.GetView(i).Color = Colors.Black
  44.     Next
  45.     'We could have used the image views array (ivs) instead of going over all the views...
  46. End Sub
  47.  
  48. Sub btnConnect_Click
  49.     Dim request As HttpRequest
  50.     request.InitializeGet(MainUrl)
  51.     HttpClient1.Execute(request, MainRequestId)
  52.     ProgressDialogShow("Fetching data...")
  53. End Sub
  54.  
  55. Sub Http_ResponseSuccess (Response As HttpResponse, TaskId As Int)
  56.     Log(TaskId & ": success")
  57.     If TaskId = MainRequestId Then 'Fetch the main page
  58.        Response.GetAsynchronously("MainResponse", _
  59.             File.OpenOutput(File.DirInternalCache, "page.html", False), True, MainRequestId)
  60.     Else 'One of the images requests has arrived, write the image to a file in the background
  61.        Response.GetAsynchronously("ImageResponse", _
  62.             File.OpenOutput(File.DirInternalCache, "image" & TaskId, False), True, TaskId)
  63.     End If
  64. End Sub
  65. Sub Http_ResponseError (Reason As String, StatusCode As Int, TaskId As Int)
  66.     ToastMessageShow("Error. TaskId: " & TaskId & ", Reason: " & Reason & ", StatusCode: " & StatusCode, True)
  67.     ProgressDialogHide
  68. End Sub
  69. '
  70. Sub ImageResponse_StreamFinish (Success As Boolean, TaskId As Int)
  71.     If Success = False Then
  72.         Msgbox(LastException.Message, "Error")
  73.         Return
  74.     End If
  75.     Dim bd As BitmapDrawable 'load the image
  76.    bd.Initialize(LoadBitmap(File.DirInternalCache, "image" & TaskId))
  77.     ivs(TaskId).Background = bd 'set the image to an ImageView
  78. End Sub
  79.  
  80. Sub MainResponse_StreamFinish (Success As Boolean, TaskId As Int)
  81.     ResetImagesBackground
  82.     HandleMainPage (File.OpenInput(File.DirInternalCache, "page.html"))
  83. End Sub
  84. 'Parse the main page and find the 9 image links
  85. Sub HandleMainPage (in As InputStream)
  86.     start = DateTime.Now
  87.     Dim TextReader1 As TextReader
  88.     TextReader1.Initialize(in)
  89.     Dim pattern, class As String
  90.     class = "<td class=" & QUOTE & "Photo" & QUOTE & ">"
  91.     pattern = "img src=\q([^q]+)\q".Replace("q", QUOTE)
  92.     Dim links As List
  93.     links.Initialize
  94.     Dim line As String
  95.     line = TextReader1.ReadLine
  96.     Do While line <> Null
  97.         If line.IndexOf(class) > -1 Then
  98.             Dim link As String
  99.             Dim m As Matcher
  100.             m = Regex.Matcher(pattern, line)
  101.             If m.Find Then
  102.                 links.Add(m.Group(1)) 'add the image link
  103.            End If
  104.         End If
  105.         line = TextReader1.ReadLine
  106.     Loop
  107.     TextReader1.Close
  108.     Log("done parsing main page: " & (DateTime.Now - start))
  109.     For i = 0 To links.Size - 1 'send request for each image
  110.        Dim request As HttpRequest
  111.         request.InitializeGet(links.Get(i))
  112.         HttpClient1.Execute(request, i)
  113.     Next
  114.     ProgressDialogHide
  115. End Sub
  116.  
  117. 'Show the second activity with the chosen image.
  118. Sub img_Click
  119.     Dim iv As ImageView
  120.     iv = Sender
  121.     Dim bd As BitmapDrawable
  122.     bd = iv.Background
  123.     Activity2.Bitmap1 = bd.Bitmap
  124.     StartActivity(Activity2)
  125. End Sub
:) Tummo Software :D
http://tummosoft.com

Hình đại diện của người dùng
tummosoft
Điều hành viên
Điều hành viên
Bài viết: 331
Ngày tham gia: T.Hai 19/05/2014 2:23 pm
Has thanked: 7 time
Been thanked: 57 time
Liên hệ:

Re: [Basic4Android] Bài 20 - Lớp thư viện Http và Httputils2

Gửi bàigửi bởi tummosoft » T.Hai 04/08/2014 8:27 am

Tiếp theo là ví dụ sử dụng lớp thư viện HttpUtils2 làm một Download Manager

Hình ảnh

1- Bắt đầu download

  1. Sub btnDownload_Click
  2.    Dim dd As DownloadData
  3.    dd.url = link1 '<--- download link
  4.   dd.EventName = "dd"
  5.    dd.Target = Me
  6.    CallSubDelayed2(DownloadService, "StartDownload", dd)
  7. End Sub


2- Bẫy các sự kiện

  1. Sub dd_Progress(Progress As Long, Total As Long)
  2.    ProgressBar1.Progress = Progress / Total * 100
  3.    Label1.Text = NumberFormat(Progress / 1024, 0, 0) & "KB / " & _
  4.       NumberFormat(Total / 1024, 0, 0) & "KB"
  5. End Sub
  6.  
  7. Sub dd_Complete(Job As HttpJob)
  8.    Log("Job completed: " & Job.Success)
  9.    Job.Release
  10. End Sub


3- Thêm chức năng Cacel khi đang download

  1. Sub btnCancel_Click
  2.    CallSubDelayed2(DownloadService, "CancelDownload", link1)
  3. End Sub
:) Tummo Software :D
http://tummosoft.com


Quay về “Android”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách