Bài 35-Truy cập NodeJS RESTful Web Services với thư viện Volley và Retrofit (FINAL)

Đây là bài học cuối cùng, kết thúc chuỗi series bài học về NodeJS- MongoDB. Toàn bộ bài học được tổng hợp trong trang này.

Có rất nhiều kỹ thuật để truy cập các WEB API, tùy vào nhu cầu của lập trình viên mà ta lựa chọn các thư viện khác nhau. Ở đây dân chúng hay bàn luận về Volley Retrofit cũng như so sánh phân vân nên chọn cái nào? mấy câu hỏi này bạn tự Google search nha. Bạn chỉ cần biết là ta có thêm 2 thư viện Volley Retrofit để truy cập WEB API là đủ rồi, còn cụ thể như thế nào thì cứ hỏi bác Google là OK á.

Trong bài này Tui chỉ giới thiệu sơ Volley để lấy danh sách Product thôi nha (chi tiết bạn xem trên Blog của Alif’s Blog để áp dụng cho các Web API còn lại, nó vô cùng đơn giản nhưng Tui busy quá không quá trình bày tất tần tật được), Retrofit bạn tự search.

Bước 1:

Tạo một Android Kotlin Project tên VolleyToNodeJS.

thêm lệnh api ‘com.android.volley:volley:1.1.0’ trong build.gradle của app level

Sau khi gõ lệnh xong thì nhớ bấm mục số 2 (Sync now)==>Lúc này thư viện volley sẽ được đưa vào ứng dụng và ta sử dụng nó một cách dễ dàng, đơn giản nhất.

Bước 2:

Thêm một ListView cho màn hình chính MainActivity như sau:

[code language=”xml”]

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical”
tools:context=”.MainActivity”>

<ListView
android:id=”@+id/lvProduct”
android:layout_width=”match_parent”
android:layout_height=”match_parent” />
</LinearLayout>

[/code]

Bước 3:

Coding sử dụng Volley để triệu gọi Web API lấy danh sách Product đơn giản như sau:

[code language=”java”]

fun TaiDanhSachProduct_Volley()
{
var url=”http://192.168.1.137/nodejsapi/products”
val queue = Volley.newRequestQueue(this)

val getRequest = JsonArrayRequest(Request.Method.GET, url, null,
object : Response.Listener<JSONArray> {
override fun onResponse(response: JSONArray) {
//response là 1 JSonArray chưa danh sách Product->ta phân tích để lấy dữ liệu trong này ra là ok
}
},
object : Response.ErrorListener {
override fun onErrorResponse(error: VolleyError) {
Log.d(“Error.Response”, error.toString())
}
}
)
queue.add(getRequest)
}

[/code]

Tổng thể ta có coding cuối cùng cho MainActivity như sau:

[code language=”java”]

package com.communityuni.volleytonodejs

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import android.widget.ListView
import com.android.volley.Request
import com.android.volley.toolbox.Volley
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.VolleyError
import com.android.volley.toolbox.JsonArrayRequest
import org.json.JSONObject
import com.android.volley.toolbox.JsonObjectRequest
import org.json.JSONArray

class MainActivity : AppCompatActivity() {

lateinit var lvProduct:ListView
lateinit var adapter: ArrayAdapter<String>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
addControls()
}
private fun addControls() {
lvProduct=findViewById(R.id.lvProduct)
adapter= ArrayAdapter(this,android.R.layout.simple_list_item_1)
lvProduct.adapter=adapter
}

override fun onResume() {
super.onResume()
TaiDanhSachProduct_Volley()
}
fun TaiDanhSachProduct_Volley()
{
var url=”http://192.168.1.137/nodejsapi/products”
val queue = Volley.newRequestQueue(this)

val getRequest = JsonArrayRequest(Request.Method.GET, url, null,
object : Response.Listener<JSONArray> {
override fun onResponse(response: JSONArray) {
//response là 1 JSonArray chưa danh sách Product
adapter.clear()
for (i in 0 until response.length())
{
var jsonObject=response.getJSONObject(i)
var line=jsonObject.getString(“Ma”)+
“\n”+jsonObject.getString(“Ten”)+
“\n”+jsonObject.getDouble(“DonGia”)
adapter.add(line)
}
}
},
object : Response.ErrorListener {
override fun onErrorResponse(error: VolleyError) {
Log.d(“Error.Response”, error.toString())
}
}
)
queue.add(getRequest)
}
}

[/code]

Chạy lên ta có kết quả:

Còn các API khác (POST, PUT, DELETE, GET chi tiết Product) các bạn cố gắng tự mày mò nha.Vì Volley là một trong những thư viện vô cùng đơn giản, dễ sử dụng và rất hiệu quả, nếu không làm được thì có thể add Facebook http://facebook.com/duythanhcse , Tui sẽ support khi rảnh

Coding của bài này tải ở đây

Chúc các bạn thành công!

Leave a Reply