上記([Codelabsチャレンジ例説明1]核酸検査結果認証照会システム-認証ログイン)は、核酸検査結果認証照会システムの認証ログイン部分の機能を実現します。認証とログインが完了したら、次のステップ核酸検査結果を実現することです。データのインポートとクエリ機能。
クラウドデータベースは、デバイスクラウドデータの協調管理、統合データモデル、データクエリ機能を十分に満たすことができる豊富なデータ管理APIインターフェースなどの機能を提供するデバイスクラウド協調データベース製品です。
「CodelabsChallenge-ZeroFoundationからの認定クエリシステムの構築」の活動が本格化しています。作品を共有して、Huawei freebuds proワイヤレスイヤホン、Huawei band 6nfcバージョン、アライアンスバックパックなどのすばらしいギフトを獲得するチャンスがあります。ぜひお越しください。参加する>> https://developer.huawei.com/consumer/cn/forum/topic/0202851788421280176?fid = 0102822233052010012
統合SDK
1.1統合SDK
AppGallery Connectは、 SDKの形式でデータ管理機能を開きます。データ管理機能を開発する前に、まずクラウドデータベースSDKを統合し、 AGCが提供するJSONファイルをダウンロードしてアプリケーションの基本情報を取得する必要があります。次に、データの表示はテーブルに依存する必要があります。今回は、オープンソースの自動テーブルフレームワーク-SmartTableを選択しました。これも、最初にSDKを統合する必要があります。
1.クラウドデータベースとSmartTableSDKを統合する前に、 Mavenウェアハウス、 AGCプラグイン、およびコンパイルの依存関係の統合が完了していることを確認してください。
2.アプリケーションレベルのbuild.gradleファイルで統合クラウドデータベースとSmartTableSDKを構成します。
dependencies {
//agc-core的依赖
implementation 'com.huawei.agconnect:agconnect-core:1.6.0.300'
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
//云数据库sdk
implementation 'com.huawei.agconnect:agconnect-cloud-database:1.4.9.300'
compile 'com.github.huangyanbin:SmartTable:2.0'
}
上記のSDKまたは依存関係を追加したら、右上隅にある[今すぐ同期]をクリックして、同期が完了するのを待つ必要があります。
開発準備
1.1サービスを開く
1. AGCコンソールにログインし、[マイプロジェクト]をクリックして、以前に作成したプロジェクトを選択します。
2.メニューディレクトリで「Build-CloudDatabase」を見つけ、右上隅にある「Activate Now」をクリックします。アクティベーション後のインターフェースは次のようになります。これまでのところ、クラウドデータベースサービスは正常にアクティベートされています。
1.2追加されたクラウドデータベースデータオブジェクト
クラウドデータベースを管理する前に、新しいクラウドデータベースデータオブジェクトを追加する必要があります。データオブジェクトは主に、将来使用するためにプロジェクトに追加できるデータベースストレージ領域のデータのタイプを指定します。
1.クラウドデータサービスインターフェイスの[オブジェクトタイプ]タブを選択し、[追加]をクリックして、オブジェクトタイプとして「 personInfo 」を入力し、「 id 」、「 name 」、「 age 」、「hasInoculate」、 「」を追加します。 cardNo "フィールド検出された母集団のIDデータを格納するために使用されます。
2.オブジェクトタイプのインデックスまたはオブジェクトタイプのフィールドのインデックスを設定します。ここでは、インデックスをnameに設定するだけです。これは、必要に応じて設定できます。
3.データ管理の権限を設定します。ここでは、私の製品の位置付けに従って、管理者とデータ作成者がすべての権限を持っています。その他の役割については、特権管理を参照してください。
1.3新しいストレージエリア
データの追加、削除、クエリはデータストレージ領域で実行する必要があります。特定のオブジェクトタイプのデータを管理するために上記の操作を実行する前に、ストレージ領域を作成する必要があります。ここでは、ストレージ領域の名前を指定し、コード内のどのストレージ領域にオブジェクトタイプのデータを挿入するだけで済みます。
クラウドデータサービスインターフェースで、「ストレージゾーン」タブを選択し、「追加」をクリックして、作成するストレージゾーンの名前を入力します。これは、「 personInfoZone 」という名前のストレージゾーンを作成する例です。
PS :[データ]タブでは、ストレージ領域とオブジェクトタイプに応じてデータをクエリできます。データを挿入すると、クラウド側のクエリデータとして使用できます。
1.4データのインポート
検査データのインポートは、「手動インポート」と「バッチインポート」の2つの方法で選択できます。
1.手動インポート
[データ]タブで、作成するオブジェクトタイプとストレージ領域の名前を選択し、[追加]をクリックします。
オブジェクトタイプのフィールドに従ってデータを追加します。ここでは、例として「 personInfo 」を取り上げます。
2.バッチインポート
[データ]タブで、作成するオブジェクトの種類と保存領域の名前を選択し、[データテンプレート]をクリックします。
注:データテンプレートは、ストレージ領域とオブジェクトタイプに関する情報を含むサンプルデータのjsonファイルです。データを直接追加してからインポートすることができます。
データテンプレートのjsonファイルを開き、オブジェクトタイプフィールドに従ってデータを追加します。次のように、2つの新しい有効なデータが追加されます。
[ ...>インポート]をクリックして、新しく追加されたデータをインポートします。次の図に示すように、 jsonのデータを段階的に追加できます。
注:データがExcelファイルに保存されている場合は、追加する前にjsonファイルに変換できます。Excel -to- json方式の場合は、自分でGoogleで検索してください。
1.5構成ファイルを更新する
クラウドデータベースサービスがアクティブ化されると、 AGCはクラウドデータベースのオブジェクトタイプとその他の情報をJSONファイルに書き込みます。したがって、「agconnect-services.json」ファイルを再度ダウンロードして、AndroidStudioで更新する必要があります。詳細については、シリーズSDKの最初の部分-構成ファイルの追加の章の「統合」を参照してください。
インターフェイスデザイン
主な機能インターフェイスの設計は、次のように比較的単純です。
1.テストデータの形式を表示します。
2.ログアウトボタン。
注:これは、データを正常に照会するためのインターフェースの例であり、テーブルは最初は空です。
データオブジェクトのインポート
コード内のオブジェクトの作成、挿入、変更などの操作を実行する前に、開発準備の章で作成されたデータオブジェクトをAndroidStudioプロジェクトにインポートする必要があります。具体的な操作は次のとおりです。
1. AGCにログインし、プロジェクトの下でクラウドデータベースサービスに入ります。
2. [オブジェクトタイプ]タブで、右上隅の[エクスポート]をクリックし、エクスポートファイル形式として[ java ]形式を選択します( Androidプロジェクトを開発しているため、 Webおよびその他のプロジェクトの場合、 AGCはオブジェクトタイプも提供しますjs形式などでファイルをフォーマットします。)。
3. src \ main \ java \ com \ example \ packagenameディレクトリに、 modelという名前の新しいパッケージを作成し、ダウンロードしたばかりのpersonInfoオブジェクトファイルとオブジェクトヘルプファイルをこのディレクトリに配置します。
データベースの初期化
このシステムのビジネス要件は、メインインターフェイスに入ること、つまり、インポートされた検出データをクエリすることです。クエリを実行する前に、データベースを初期化する必要があります。詳細については、公式ドキュメント-initializationを参照してください。
1. AGConnectCloudDB 、データベース構成、およびストレージ領域を初期化します。初期化後、データベースはライフサイクル中いつでも操作する必要があるため、次のグローバル変数を定義する必要があります。
//初始化数据库
AGConnectCloudDB mCloudDB;
//初始化数据库配置
CloudDBZoneConfig mConfig;
//初始化存储区
CloudDBZone mCloudDBZone;
//初始化表格
private SmartTable table;
//云端数据对象List
private static List<personInfo> personInfoList = new ArrayList<>();
2.一連の操作を完了して、 AGConnect CloudDBインスタンスを取得し、オブジェクトタイプを作成して、 CloudDBゾーンを開きます。( personInfoは、実際のストレージ領域名に置き換える必要があります。ここで、 Cloud DBゾーンの同期構成属性はキャッシュモードであり、アクセス属性はパブリックストレージ領域です)。
private void initView() {
//初始化云数据库
AGConnectCloudDB.initialize(getApplicationContext());
AGConnectInstance instance = AGConnectInstance.buildInstance(new AGConnectOptionsBuilder().setRoutePolicy(AGCRoutePolicy.CHINA).build(getApplicationContext()));
mCloudDB = AGConnectCloudDB.getInstance(instance, AGConnectAuth.getInstance(instance));
Log.i(TAG,"The cloudDB is" + mCloudDB);
try {
mCloudDB.createObjectType(model.ObjectTypeInfoHelper.getObjectTypeInfo());
mConfig = new CloudDBZoneConfig("personInfoZone",
CloudDBZoneConfig.CloudDBZoneSyncProperty.CLOUDDBZONE_CLOUD_CACHE,
CloudDBZoneConfig.CloudDBZoneAccessProperty.CLOUDDBZONE_PUBLIC);
mConfig.setPersistenceEnabled(true);
Task<CloudDBZone> openDBZoneTask = mCloudDB.openCloudDBZone2(mConfig, true);
openDBZoneTask.addOnSuccessListener(new OnSuccessListener<CloudDBZone>() {
@Override
public void onSuccess(CloudDBZone cloudDBZone) {
Log.i("open clouddbzone", "open cloudDBZone success");
mCloudDBZone = cloudDBZone;
//开始绑定数据
bindData();
// Add subscription after opening cloudDBZone success
//addSubscription();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Log.w("open clouddbzone", "open cloudDBZone failed for " + e.getMessage());
}
});
} catch (AGConnectCloudDBException e) {
Toast.makeText(DatabaseActivity.this, "initialize CloudDB failed" + e, Toast.LENGTH_LONG).show();
}
}
データのバインドとクエリ
1.前のステップのbindDataの機能は、 AGCクラウドからインポートされたデータをSmartTableテーブルフレームにバインドしてから表示することです。
private void bindData() {
CloudDBZoneQuery<personInfo> query = CloudDBZoneQuery.where(personInfo.class);
queryPersonInfo(query);
}
private List<personInfo> queryPersonInfo(CloudDBZoneQuery<personInfo> query) {
if (mCloudDBZone == null) {
Log.w(TAG, "CloudDBZone is null, try re-open it");
return null;
}
Task<CloudDBZoneSnapshot<personInfo>> queryTask = mCloudDBZone.executeQuery(query,
CloudDBZoneQuery.CloudDBZoneQueryPolicy.POLICY_QUERY_FROM_CLOUD_ONLY);
//List<personInfo> tmpInfoList = new ArrayList<>();
queryTask.addOnSuccessListener(new OnSuccessListener<CloudDBZoneSnapshot<personInfo>>() {
@Override
public void onSuccess(CloudDBZoneSnapshot<personInfo> snapshot) {
try {
personInfoList = processQueryResult(snapshot);
} catch (AGConnectCloudDBException e) {
Log.e(TAG, "onfailed: "+e.getErrMsg() );
}
Log.i(TAG, "onSuccess: query result success");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
mUiCallBack.updateUiOnError("Query failed");
Log.i(TAG, "onSuccess: query result failed");
}
});
return personInfoList;
}
2. processQueryResultは、クラウドデータを処理および表示するためのメイン関数です。ここで、データオブジェクトのフィールドをリストに追加し、SmartTableに追加する必要があります。
private List<personInfo> processQueryResult(CloudDBZoneSnapshot<personInfo> snapshot) throws AGConnectCloudDBException {
CloudDBZoneObjectList<personInfo> bookInfoCursor = snapshot.getSnapshotObjects();
List<personInfo> bookInfoList = new ArrayList<>();
List<PersonInfo> list = new ArrayList<>();
table = findViewById(R.id.table);
try {
while (bookInfoCursor.hasNext()) {
personInfo info = bookInfoCursor.next();
bookInfoList.add(info);
list.add(new PersonInfo(info.getId(),info.getName(),info.getAge(),info.getHasInoculate()==true?"是":"否",info.getCardNo()));
// list.add(new PersonInfo(1,"xuhao",34,true,"12321"));
}
} catch (AGConnectCloudDBException e) {
Log.w(TAG, "processQueryResult: " + e.getMessage());
} finally {
snapshot.release();
mCloudDB.closeCloudDBZone(mCloudDBZone);
}
table.setData(list);
table.getConfig().setContentStyle(new FontStyle(50, Color.BLUE));
mUiCallBack.onAddOrQuery(bookInfoList);
return bookInfoList;
}
3.アカウントがログアウトすると、システムはログインインターフェイスにジャンプし、AGConnectAuth。signOutメソッドを呼び出します。詳細に立ち入る必要はありません。
findViewById(R.id.login_out).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
AGConnectAuth.getInstance().signOut();
Intent intent = new Intent();
intent.setClass(DatabaseActivity.this, LoginActivity.class);
startActivity(intent);
Log.i(TAG, "onClick: log out successfully");
}
});
これまでのところ、核酸検出結果照会システムの開発は完了しています。実行後、システムにログインして、クラウドデータベースクラウド内のすべての検出データを照会できます。
要約する
AGCクラウドデータベースサービスによって提供されるデバイスとクラウドのデータ同期機能は依然として非常に実用的であり、サーバーの展開とデータ管理の作業負荷を排除します。もちろん、データクエリに加えて、データの追加や削除などの一般的なデータ操作もシステムに直接実装できます。クラウドデータベースサービスによって提供される機能は、単なるクエリ以上のものです。
これまでに、核酸検出結果システムの機能開発を完了しました。このシステムは、 Codelabチャレンジのテーマ機能の基本的な実現に過ぎません。ガイダンスドキュメントとデモに基づいて、 AGCサーバーレスサービスの可能性をさらに広げることができます。あなた自身の想像力と組み合わせて。セックス。
参照ドキュメント:
クラウドデータベースを初期化する方法:https ://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-clouddb-get-started-0000001127676473#section10889116163412
クラウドデータベースクラウドデータクエリ:
開発準備とSDK統合に必要な読み物:
SmartTableの元のプロジェクトと統合ガイド:
https://github.com/huangyanbin/smartTable
別の例の説明が添付されています:[Codelabsチャレンジ例の説明1]核酸検査結果認証クエリシステム-認証ログイン