こんにちは、まっさん(@Tera_Msaki)です。
この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)
ポイント
AndroidではRoom(SQLite)というデータベースが使用できます。
データベースのテーブルで、プライマリキーを自動採番されたシーケンスとするケースが多々あります。
レコード追加後に自動採番されたプライマリーキーを取得する必要がある場合、DAOインタフェースの戻り値から取得可能です。
Room(SQLite) データベースの実装はこちらです↓↓↓
DAO(データアクセスオブジェクト)
Roomではクエリ式(@Query)でSQLを指定する方法とINSERT、UPDATE、DELETEなどはエンティティクラスにレコードをセットして更新する方法があります。
@Dao
public interface ShopDao {
:
// INSERT
@Insert(onConflict = OnConflictStrategy.IGNORE)
long insert(Shop shop);
// UPDATE
@Update(onConflict = OnConflictStrategy.REPLACE)
void update(Shop shop);
INSERTで自動採番されたシーケンスを取得するために、戻り値(long)で定義します。
更新処理
AndroidでRoomを使う場合、UIスレッドとは別のスレッドで実行する必要があります。
実行の終了は、Handlerを使用します。
プライマリキーを自動採番する利点としては、データベースが一意性を担保してくれることです。
この為、明示的に追加か更新が制御できます。
エンティティのプライマリキーがnullであるかを条件に追加(INSERT)か、更新(UPDATE)を判断します。
private static final boolean DEBUG = true;
private static final String TAG = StockerDatabaseHelper.class.getSimpleName();
private final Handler handler = new Handler(Looper.getMainLooper());
private Map<Integer,String> shop = new HashMap<>();
private long sequence;
:
public void updateShop(Shop shop, String keywords) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
try {
if (shop.sSeq == null)
sequence = shopDao.insert(shop);
else
shopDao.update(shop);
} catch (Exception e) {
Log.d(TAG, String.format("updateShop:%s", e.getMessage()));
e.printStackTrace();
}
handler.post(() -> {
if (shop.sSeq == null)
shop.sSeq = (int)sequence;
if (DEBUG) Log.d(TAG, String.format("updateShop:%d", shop.sSeq));
setSName(shop.sSeq, shop.sName);
getShops(keywords);
});
});
}
実行結果の引き渡したエンティティのプライマリキーはnullのままなので、戻り値の自動採番されたシーケンスを代入します。
サンプルでは、setSNameでアプリの内部処理でプライマリキーと名称を扱うためのMapを作成し、getShopsでレコード追加後のリスト(keywordsは検索フィルタ)を作成しています。
今回は、ここまでです。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪
これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。
未経験者からシステムエンジニアを目指すのに最適かと、まずは無料相談から♪
未経験者からプログラマーを目指すのに最適かと、まずは無料カウンセリングから♪
カリキュラムとサポートがしっかりしています、お得なキャンペーンとかいろいろやっています♪
ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適かと、まずは無料オンライン相談から♪
参考になったら、💛をポッチとしてね♪
コメント欄