タグ付けされた質問 「android-room」

Android Room Persistence Library(Androidアーキテクチャコンポーネントの一部)に関連する質問

7
ルーム-スキーマエクスポートディレクトリが注釈プロセッサに提供されていないため、スキーマをエクスポートできません
Androidデータベースコンポーネントルームを使用しています すべてを設定しましたが、コンパイルすると、Android Studioから次の警告が表示されます。 スキーマエクスポートディレクトリは注釈プロセッサに提供されていないため、スキーマをエクスポートできません。room.schemaLocationアノテーションプロセッサ引数を指定するか、 exportSchemaをfalseに設定できます。 私が理解しているように、それはDBファイルが配置される場所です アプリにどのような影響がありますか?ここでのベストプラクティスは何ですか?デフォルトの場所(false値)を使用する必要がありますか?

6
Room Persistence libの自動インクリメントとして主キーを作成する方法
Entity(Room Persistence lib)クラスのFoodを作成しfoodIdています。ここで、自動インクリメントとして作成します。 @Entity class Food(var foodName: String, var foodDesc: String, var protein: Double, var carbs: Double, var fat: Double) { @PrimaryKey var foodId: Int = 0 var calories: Double = 0.toDouble() } foodId自動インクリメントフィールドを設定するにはどうすればよいですか?


12
インクリメンタルアノテーション処理要求された警告を取り除く方法は?
私はAndroid開発を使用し始め、Roomライブラリを使用しようとしています。昨日から私はこの警告メッセージに直面しています w:[kapt]インクリメンタルアノテーション処理が要求されましたが、次のプロセッサはインクリメンタルではないため、サポートは無効になっています:androidx.lifecycle.LifecycleProcessor(NON_INCREMENTAL)、androidx.room.RoomProcessor(NON_INCREMENTAL)。 私は調査して修正しようとしましたが、このエラーを回避できないのは、私のgrale.buildファイルです。私が間違っていることを提案/アドバイスしてください。 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "ps.room.bookkeeper" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation":"$projectDir/schemas".toString()] } } buildTypes { release { minifyEnabled false …

20
Androidルームの永続性:AppDatabase_Implは存在しません
私のアプリデータベースクラス @Database(entities = {Detail.class}, version = Constant.DATABASE_VERSION) public abstract class AppDatabase extends RoomDatabase { private static AppDatabase INSTANCE; public abstract FavoritesDao favoritesDao(); public static AppDatabase getAppDatabase(Context context) { if (INSTANCE == null) { INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, Constant.DATABASE).allowMainThreadQueries().build(); //Room.inMemoryDatabaseBuilder(context.getApplicationContext(),AppDatabase.class).allowMainThreadQueries().build(); } return INSTANCE; } public static void destroyInstance() { INSTANCE = …

7
Androidルーム-自動生成で新しく挿入された行のIDを取得します
これは、Room Persistence Libraryを使用してデータベースにデータを挿入する方法です。 エンティティ: @Entity class User { @PrimaryKey(autoGenerate = true) public int id; //... } データアクセスオブジェクト: @Dao public interface UserDao{ @Insert(onConflict = IGNORE) void insertUser(User user); //... } 上記のメソッド自体で挿入が完了したら、個別の選択クエリを記述せずにUserのIDを返すことはできますか?

19
Androidルーム-単純な選択クエリ-メインスレッドのデータベースにアクセスできません
Room Persistence Libraryでサンプルを試しています。エンティティを作成しました: @Entity public class Agent { @PrimaryKey public String guid; public String name; public String email; public String password; public String phone; public String licence; } DAOクラスを作成しました。 @Dao public interface AgentDao { @Query("SELECT COUNT(*) FROM Agent where email = :email OR phone = :phone OR licence = :licence") …

6
Androidルームでエンティティの特定のフィールドを更新する
新しいプロジェクトでAndroidルームの永続性ライブラリを使用しています。テーブルの一部のフィールドを更新したい。私は私のように試しましたDao- // Method 1: @Dao public interface TourDao { @Update int updateTour(Tour tour); } しかし、このメソッドを使用して更新しようとすると、ツアーオブジェクトの主キー値と一致するエンティティのすべてのフィールドが更新されます。利用した@Query // Method 2: @Query("UPDATE Tour SET endAddress = :end_address WHERE id = :tid") int updateTour(long tid, String end_address); それは機能していますが、私のエンティティには多くのフィールドがあるため、私の場合は多くのクエリがあります。Method 1where id = 1のような一部のフィールド(すべてではない)を更新する方法を知りたいです。(idは主キーの自動生成です)。 // Entity: @Entity public class Tour { @PrimaryKey(autoGenerate = true) public long …

20
部屋はデータの整合性を検証できません
Room Databaseでプログラムを実行しているときに、このエラーが発生します Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number. データベースのバージョンを更新する必要があるようですが、Roomのどこから更新できますか?

3
Androidルーム-LIKEを使用したクエリの選択
名前にテキストが含まれるすべてのオブジェクトを検索するクエリを作成しようとしています。 @Query("SELECT * FROM hamster WHERE name LIKE %:arg0%") fun loadHamsters(search: String?): Flowable<List<Hamster>> メッセージ: Error:no viable alternative at input 'SELECT * FROM hamster WHERE name LIKE %' Error:There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (near "%": syntax error) Error:Unused parameter: arg0 また、私は試しています: @Query("SELECT * …

6
新しいテーブルのみが追加された場合のルームデータベースの移行
仮定してみましょう、私は単純な部屋データベースを持っています: @Database(entities = {User.class}, version = 1) abstract class AppDatabase extends RoomDatabase { public abstract Dao getDao(); } ここで、新しいエンティティを追加します。Petバージョンを2にバンプします。 @Database(entities = {User.class, Pet.class}, version = 2) abstract class AppDatabase extends RoomDatabase { public abstract Dao getDao(); } もちろん、Roomは例外をスローします。 java.lang.IllegalStateException: A migration from 1 to 2 is necessary. 私はUserクラスを変更していないと仮定し(すべてのデータが安全であるため)、新しいテーブルを作成するだけの移行を提供する必要があります。そこで、Roomによって生成されたクラスを調べ、生成されたクエリを検索して新しいテーブルを作成し、それをコピーして移行に貼り付けます。 final Migration …


8
Android Room Persistence Library:Upsert
AndroidのRoom永続化ライブラリには、オブジェクトまたはコレクションに対して機能する@Insertおよび@Updateアノテーションが含まれています。ただし、データがデータベースに存在する場合と存在しない場合があるため、UPSERTを必要とするユースケース(モデルを含むプッシュ通知)があります。 Sqliteにはネイティブのアップサートはありません。回避策はこのSO質問で説明されています。そこでの解決策を考えると、どのようにそれらを部屋に適用するのでしょうか? より具体的には、外部キー制約を壊さないようにRoomに挿入または更新を実装するにはどうすればよいですか?onConflict = REPLACEでinsertを使用すると、その行への外部キーのonDeleteが呼び出されます。私の場合、onDeleteはカスケードを引き起こし、行を再挿入すると、外部キーを持つ他のテーブルの行が削除されます。これは意図された動作ではありません。

5
バックグラウンドサービスと更新UIからViewModelのLiveDataを更新する方法
最近、Googleによって最近導入されたAndroidアーキテクチャを調査しています。ドキュメントから私はこれを見つけました: public class MyViewModel extends ViewModel { private MutableLiveData<List<User>> users; public LiveData<List<User>> getUsers() { if (users == null) { users = new MutableLiveData<List<Users>>(); loadUsers(); } return users; } private void loadUsers() { // do async operation to fetch users } } アクティビティは次のようにこのリストにアクセスできます。 public class MyActivity extends AppCompatActivity { public void …

18
Android Roomデータベース:エンティティでArraylistを処理する方法は?
オフラインデータ保存用のRoomを実装しました。しかし、Entityクラスでは、次のエラーが発生します。 Error:(27, 30) error: Cannot figure out how to save this field into database. You can consider adding a type converter for it. そして、クラスは次のとおりです。 @Entity(tableName = "firstPageData") public class MainActivityData { @PrimaryKey private String userId; @ColumnInfo(name = "item1_id") private String itemOneId; @ColumnInfo(name = "item2_id") private String itemTwoId; // THIS IS …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.