Bài 15- Thêm mới dữ liệu vào MongoDB trong Android Kotlin


bài 14 các bạn đã biết cách kết nối và truy suất dữ liệu, và đặc biết có lưu ý về việc đổi địa chỉ IP trong cấu hình của mongod.cfg. Trong bài này Tui cố tình chuyển quán Cafe khác để viết hướng dẫn nhằm mục đích thay đổi địa chỉ IP của Laptop để cố tình làm cho MongoDB Service nó chạy sai om sòm để các bạn nhớ lại rằng cứ mỗi lần bị đổi IP thì phải sửa lại mongod.cfg và chạy lại service (Lưu ý khi ta đã có Server riêng và có public IP thì hầu như chả bao giờ phải sửa lại, bạn có thể bỏ ra 1 ít tiền để mua VPS sài thử cho nó có cảm giác nha).

bài 14 thì IP Laptop của Tui do quán cafe phân giải là: 172.16.96.173 còn trong bài 15 này thì IP là: 192.168.1.137 . Dó đó khi mở lại Project trong bài 14 để tiếp tục làm chức năng thêm mới dữ liệu Tui phải sửa lại IP kết nối là 192.168.1.137 và dĩ nhiên trước đó phải chạy lại Service đã được lưu ý trong bài 14 (Còn bạn thì bạn tự kiểm tra lại máy mình nha, lấy IP theo đúng máy của bạn).

Sau khi kết thúc bài học này bạn phải thêm được dữ liệu vào MongoDB, giao diện như sau:

Để lưu dữ liệu vào MongoDB ta dùng các lệnh sau:

var connectionString = MongoClientURI("mongodb://192.168.1.137:27017")
var mongoClient = MongoClient(connectionString)

var database = mongoClient.getDatabase("QuanLySanPham")
var collection = database.getCollection("Product")
var doc = Document("Ma", "P999")
        .append("Ten", "Thuốc trị hôi nách")
        .append("DonGia", 35)
collection.insertOne(doc)

Ta sẽ tạo một Document và đưa giá trị cũng như các thuộc tính vào sao cho khớp với bảng trong MongoDB.

Lệnh insertOne để lưu document vào MongoDB.

Chi tiết các bước ta làm như sau:

Thiết kết màn hình Thêm Product. Cách thêm một màn hình mới Tui đã chỉ rất chi tiết trong bài 14 rồi, các bạn tự xem lại nha.

Màn hình Thêm Product đặt tên là: ThemProductActivity. Tui chụp cấu trúc để dễ tưởng tượng:

Lưu ý là mở lại Project cũ, bài này chỉ thêm “ThemProductActivity” thôi nha các tình yêu.

Giao diện XML như sau:

<?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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ThemProductActivity">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Mã Product:"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/edtMa"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Tên Product:"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/edtTen"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName" />
    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Đơn giá:"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/edtDonGia"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberDecimal" />

    <Button
        android:onClick="xuLyThemProduct"
        android:id="@+id/btnLuu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Lưu"
        android:textSize="20sp" />
</LinearLayout>

Giao diện khi chạy lên sẽ như sau:

Tiếp tục ta bổ sung coding cho ThemProductActivity:

package com.communityuni.androidkotlintomongodb

import android.os.AsyncTask
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.EditText
import android.widget.Toast
import com.communityuni.model.Product
import com.mongodb.MongoClient
import com.mongodb.client.MongoCollection
import com.mongodb.client.MongoDatabase
import com.mongodb.MongoClientURI
import org.bson.Document

class ThemProductActivity : AppCompatActivity() {
    lateinit var edtMa:EditText
    lateinit var edtTen:EditText
    lateinit var edtDonGia:EditText
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_them_product)

        addControls()
    }

    private fun addControls() {
        edtMa=findViewById(R.id.edtMa)
        edtTen=findViewById(R.id.edtTen)
        edtDonGia=findViewById(R.id.edtDonGia)
    }
    fun xuLyThemProduct(view:View)
    {
        var ma=edtMa.text.toString()
        var ten=edtTen.text.toString()
        var gia=edtDonGia.text.toString()
        var p=Product(ma,ten,gia.toDouble())

        ThemProductTask().execute(p)
    }
    inner class ThemProductTask : AsyncTask<Product, Void, Boolean>()
    {
        override fun onPreExecute() {
            super.onPreExecute()
        }
        override fun doInBackground(vararg p0: Product?): Boolean {
            var p:Product?=p0[0]
            try {
                var connectionString = MongoClientURI("mongodb://192.168.1.137:27017")
                var mongoClient = MongoClient(connectionString)

                var database = mongoClient.getDatabase("QuanLySanPham")
                var collection = database.getCollection("Product")
                var doc = Document("Ma", p?.Ma)
                        .append("Ten", p?.Ten)
                        .append("DonGia", p?.DonGia)
                collection.insertOne(doc)
                return true
            } catch (ex: Exception) {
                Log.e("LOI", ex.toString())
            }
            return false
        }
        override fun onPostExecute(result: Boolean?) {
            super.onPostExecute(result)
            if(result==true)
            {
                Toast.makeText(applicationContext,"Thêm thành công",Toast.LENGTH_LONG).show();
                finish()
            }
            else
            {
                Toast.makeText(applicationContext,"Thêm thất bại",Toast.LENGTH_LONG).show();
            }
        }
    }
}

Cũng như bài 14, ta phải dùng đa tiến trình để xử lý. Các kiến thức và Kotlin Tui đã trình bày chi tiết trong link này với đầy đủ kiến thức và Ebook, hoặc các bạn có thể đăng ký học Kotlin qua Video tại đây.

Bây giờ trong MainActivity ta gọi lệnh mở màn hình ThemProductActivity:

fun ThemProduct(view:View)
{
    var intent= Intent(this,ThemProductActivity::class.java)
    startActivity(intent)
}

Chạy lên ta sẽ được kết quả như mong muốn.

Các bạn có thể tải source code đầy đủ ở đây: Source code thêm mới dữ liệu MongoDB trong Android Kotlin.

Và các Em chú ý là Project này sẽ được dùng cho bài sau nữa nha, nên bắt buộc phải hiểu và làm được bài này cho tốt.

Bài học Sau Tui sẽ hướng dẫn các bạn các kỹ thuật tương tác dữ liệu (sửa, xóa) trực tiếp từ Android Kotlin tới MongoDB, các bạn chú ý theo dõi.

Các khóa học online khác, bạn có thể tham khảo tại đây: http://communityuni.com/

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

 

2 responses

  1. […] trong chuỗi bài hướng dẫn tương tác MongoDB trong Android Kotlin, ta đã biết xem, thêm, sửa và giờ là thao tác Xóa. Kết thúc bài này ta đã hoàn thành sứ mệnh CRUD, […]

  2. […] bạn phải tự trả lời câu hỏi của Tui như sau: Tại sao trong các bài 13, bài 14, bài 15, bài 16, bài 17, ta đã dùng Android để kết nối và tương tác CSDL MongoDB được […]

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 )

Google photo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

%d bloggers like this: