Huawei Cloud DB - CRUD 작업을 수행하는 방법

5159 단어
이 시나리오에서는 BookmarkStatus 및 LikeStatus라는 두 개의 테이블이 있습니다. BookmarkStatus 및 LikeStatus 테이블은 지정된 개체에 대한 각 사용자의 북마크/좋아요에 대한 레코드를 보유하고 사용자가 좋아요 또는 북마크를 제거하면 레코드를 삭제합니다.

클라우드 db 개체를 초기화하는 것부터 시작하겠습니다. 나는 응용 프로그램이 시작될 때 (SplashScreen에서) 클라우드 db 개체를 한 번 초기화하고 응용 프로그램을 통해 사용할 것입니다.
companion object {
fun initDb() { AGConnectCloudDB.initialize(ContextProvider.getApplicationContext()) }
}
fun dbGetInstance(){
mCloudDb = AGConnectCloudDB.getInstance()
}

그런 다음 모든 viewModel에서 호출하는 대신 클라우드 db의 특정 기능을 호출하는 기본 viewModel을 만듭니다.open class BaseViewModel : ViewModel() {
var mCloudDbZoneWrapper: CloudDbRepository =
CloudDbRepository()
init {
mCloudDbZoneWrapper.createObjectType()
mCloudDbZoneWrapper.openCloudDbZone()
}
}
다음은 createObjectType() 및 openCloudDbZone() 함수가 수행하는 작업입니다.
`/*
개체 유형 만들기
*/
재미있는 createObjectType() {
dbGetInstance()
노력하다 {
mCloudDb!!.createObjectType(ObjectTypeInfoHelper.getObjectTypeInfo())
} 잡기(예외: AGConnectCloudDBException) {
Log.w("CloudDbRepository", 예외.errMsg)
}
}

/*
Following method opens cloud db zone with given configs.
*/
fun openCloudDbZone() {
    val mConfig: CloudDBZoneConfig = CloudDBZoneConfig(
        "YOUR_CLOUD_DB_NAME", CloudDBZoneConfig.CloudDBZoneSyncProperty.CLOUDDBZONE_CLOUD_CACHE,
        CloudDBZoneConfig.CloudDBZoneAccessProperty.CLOUDDBZONE_PUBLIC
    )
    mConfig.persistenceEnabled = true

    try {
        mCloudDbZone = mCloudDb!!.openCloudDBZone(mConfig, true)
    } catch (exception: AGConnectCloudDBException) {
        Log.w("CloudDbRepository", exception.errMsg)
    }
}`

이제 모든 설정이 완료되었습니다. 관련 저장소에서 executeUpsert() 및 executeDelete() 함수를 적절하게 호출하기만 하면 됩니다.
`비공개 재미 북마크 결과(
스냅샷: CloudDBZoneSnapshot,
책갈피: 책갈피 상태,
트리거: 부울
) {
val bookmarkStatsCursor: CloudDBZoneObjectList = snapshot.snapshotObjects

    try {
        if (bookmarkStatsCursor.hasNext()) {
            val bookmarkStats = bookmarkStatsCursor.next()
            if (bookmarkStats != null && bookmarkStats.object != null) {
                if (triggered) {
                    //deleteBookmark
                    val deleteTask = mCloudDBZone.executeDelete(bookmarkStats)
                    deleteTask.addOnSuccessListener {
                        Log.w(TAG, "BookmarkDelete success")
                        bookmarkStatus.postValue(false)
                    }.addOnFailureListener {
                        Log.w(TAG, "BookmarkDelete fail" + it.message)
                    }
                } else {
                    bookmarkStatus.postValue(true)
                }
            }
        } else {
            if (triggered) {
                //add bookmark
                val upsertTask = mCloudDBZone.executeUpsert(bookmark)
                upsertTask.addOnSuccessListener {
                    Log.w(TAG, "BookmarkAdd success")
                    bookmarkStatus.postValue(true)
                }.addOnFailureListener {
                    Log.w(TAG, "BookmarkDelete fail" + it.message)
                }
            } else {
                bookmarkStatus.postValue(false)
            }
        }

    } catch (exception: Exception) {
    }
    snapshot.release()
}`

이 함수에서 트리거 매개변수는 사용자가 북마크 버튼을 클릭했는지 여부에 대한 것입니다. 클릭한 경우 값은 true입니다.

여기에 논리가 있습니다.

사용자가 지정된 개체(다른 메서드에서 쿼리되고 스냅샷으로 이 메서드에 매개 변수로 전달됨)를 북마크한 경우 bookmarkStatsCursor.hasNext() 가 true를 반환하고 트리거되지 않은 경우 이는 사용자가 개체를 북마크했으며 북마크 상태를 표시하려고 시도함을 의미합니다. 우리가 해야 할 일은 관찰 가능한 속성인 bookmarkStatus의 postValue()를 사용하고 값을 true로 전달하는 것입니다. 사용자가 BookmarkStatus 테이블에 레코드가 있고 트리거가 true라고 가정하면 사용자가 개체의 북마크를 제거하려고 한다고 말할 수 있습니다. 따라서 테이블에서 북마크를 삭제하려면 executeDelete(bookmark)를 사용해야 합니다. addOnSuccessListener의 도움으로 사용자가 더 이상 주어진 개체에 대한 북마크를 가지고 있지 않음을 의미하는 false로 값을 게시합니다.

사용자가 지정된 개체에 책갈피가 없고 트리거가 거짓이면 사용자가 개체를 책갈피하지 않았고 책갈피 상태를 표시하려고 시도했음을 의미합니다. 우리는 값을 거짓으로 게시할 것입니다. 트리거가 참이면 사용자가 해당 개체에 책갈피를 추가하려고 합니다. 이 경우 executeUpsert(bookmark) 메서드를 사용하여 북마크 테이블에 레코드를 추가합니다.



addOnFailureListener를 사용하여 함수를 추가하거나 삭제하는 동안 발생한 오류를 포착할 수 있습니다.

LikeStatus 테이블에서 레코드를 추가하거나 삭제하려면 위에 제공된 BookmarkStatus 테이블과 동일한 논리를 사용할 수 있습니다.

따라서 보시다시피 프로젝트에 클라우드 DB를 구현하는 것은 매우 간단하며 위에서 설명한 것처럼 간단하게 모든 CRUD 기능을 적용할 수 있습니다 :)

참조

https://developer.huawei.com/consumer/en/doc/development/AppGallery-connect-Guides/agc-clouddb-introduction-0000001054212760

좋은 웹페이지 즐겨찾기