Phòng Android liên tục: AppDatabase_Impl không tồn tại

160
pratik deshai 2017-10-11 01:29.

Lớp cơ sở dữ liệu ứng dụng của tôi

@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 = null;
    }
}

Gradle lib:

 compile "android.arch.persistence.room:runtime:+"   
 annotationProcessor "android.arch.persistence.room:compiler:+"

Và khi tôi hỏi ví dụ, nó sẽ xuất hiện lỗi này, AppDatabase_Impl không tồn tại trong lớp ứng dụng của tôi

public class APp extends Application {

    private boolean appRunning = false;

    @Override
    public void onCreate() {
        super.onCreate();
        AppDatabase.getAppDatabase(this); //--AppDatabase_Impl does not exist

    }   

}

21 answers

326
RWIL 2018-03-17 05:08.

Đối với những người làm việc với Kotlin , hãy thử chuyển annotationProcessorsang kapttrong ứng dụngbuild.gradle

ví dụ:

// Extensions = ViewModel + LiveData
implementation "android.arch.lifecycle:extensions:1.1.0"
kapt "android.arch.lifecycle:compiler:1.1.0"
// Room
implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"

cũng nhớ thêm plugin này

apply plugin: 'kotlin-kapt'

lên đầu tệp build.gradle cấp ứng dụng và thực hiện dọn dẹp và xây dựng lại (theo https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 )

Trong Android Studio, nếu bạn gặp lỗi khi dán mã hoặc trong quá trình xây dựng, hãy chọn Xây dựng> Dự án sạch. Sau đó chọn Xây dựng> Xây dựng lại Dự án, rồi xây dựng lại.


CẬP NHẬT

Nếu bạn đã chuyển sang androidx

def room_version = "2.2.3" // check latest version from docs

implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
82
Jahangir Kabir 2018-05-21 22:05.

Chỉ dùng

apply plugin: 'kotlin-kapt'

trong app build.gradle

Và giữ cả hai trong phụ thuộc

annotationProcessor "android.arch.persistence.room:compiler:$rootProject.roomVersion"
kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"

BIÊN TẬP

Trong phiên bản mới hơn không cần phải thêm cả hai phụ thuộc cùng một lúc Chỉ cần sử dụng, hy vọng nó sẽ hoạt động.

kapt 'android.arch.persistence.room:compiler:1.1.1'
23
Thadeus Ajayi 2018-04-19 04:37.

Tôi đã gặp lỗi này khi tôi bỏ lỡ

@Database(entity="{<model.class>})

Đảm bảo rằng mô hình thực thể được chỉ định trong chú thích ở trên tham chiếu đến lớp mô hình cụ thể và cũng đảm bảo rằng chú thích cần thiết:

@Entity(tableName = "<table_name>" ...)

được xác định đúng và bạn sẽ tốt

19
navalkishoreb 2019-07-08 23:25.

nếu bạn đang sử dụng các lớp kotlin để triển khai cơ sở dữ liệu thì hãy sử dụng

apply plugin: 'kotlin-kapt'

kapt "android.arch.persistence.room:compiler:1.1.1"

trong tệp gradle của bạn, nó sẽ hoạt động.

12
Pedro Massango 2018-11-08 00:10.

Dành cho nhà phát triển Kotlin

Dùng cái này:

implementation "android.arch.persistence.room:runtime:1.0.0"
kapt "android.arch.persistence.room:compiler:1.0.0"

Và thêm apply plugin: 'kotlin-kapt'vào đầu cấp ứng dụng build.gradle.

Dành cho nhà phát triển Java

implementation "android.arch.persistence.room:runtime:1.0.0"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
11
Idee 2018-03-15 04:06.

Nó không chỉ là cập nhật các phụ thuộc của bạn. Đảm bảo rằng tất cả các phụ thuộc Phòng của bạn có cùng một phiên bản.

implementation 'android.arch.persistence.room:rxjava2:1.1.0-alpha2'
implementation 'android.arch.persistence.room:runtime:1.1.0-alpha2'
annotationProcessor "android.arch.persistence.room:compiler:1.1.0-alpha2"

Trong đoạn mã mẫu ở trên, tất cả các phụ thuộc Phòng của tôi có cùng một phiên bản 1.1.0-alpha2

7
ahsiu 2018-01-25 01:09.

Tôi đã gặp sự cố này vì tôi đã quên các phụ thuộc apt

implementation "android.arch.lifecycle:extensions:$archLifecycleVersion"
implementation "android.arch.persistence.room:runtime:$archRoomVersion"
annotationProcessor "android.arch.lifecycle:compiler:$archLifecycleVersion"
annotationProcessor "android.arch.persistence.room:compiler:$archRoomVersion"

sau khi thêm annotationProcessor và xây dựng lại nó, sự cố đã được giải quyết.

7
shellhub 2018-11-10 22:06.

Tôi gặp sự cố, vì tôi quên @Daochú thích

@Dao
public interface SearchHistoryDao {
    @Query("SELECT * FROM search_history")
    List<SearchHistory> getAll();

    @Insert
    void insertAll(SearchHistory... histories);

    @Delete()
    void delete(SearchHistory history);
}

Hướng dẫn chính thức của Phòng

7
Deepak 2019-06-11 21:53.

đảm bảo thêm phụ thuộc chính xác cho room trong build.gradle

ext {
   roomVersion = '2.1.0-alpha06'
}

// Room components
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"

Và dòng dưới ở trên cùng-

apply plugin: 'kotlin-kapt'
6
Hajo 2018-11-24 04:27.

Có cùng một vấn đề. Đã triển khai một số lớp và giao diện như chính thức được kể trong một dự án mẫu mới do Android Studio tạo: https://developer.android.com/training/data-storage/room/

Tất cả các giải pháp được đề cập ở trên đều không giúp được gì, các tệp _Impl cần thiết theo lớp cơ sở dữ liệu của tôi không được Room tạo. Cuối cùng việc thực hiện bản dựng sạch gradle trong thiết bị đầu cuối đã cho tôi gợi ý dẫn đến giải pháp:

"cảnh báo: Thư mục xuất lược đồ không được cung cấp cho bộ xử lý chú thích nên chúng tôi không thể xuất lược đồ. Bạn có thể cung cấp room.schemaLocationđối số bộ xử lý chú thích HOẶC đặt exportSchema thành false."

Tôi đã thêm tham số exportSchema = false trong lớp cơ sở dữ liệu

@Database(entities = arrayOf(User::class), version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Và sau đó, nó hoạt động, tìm thấy hai tệp được tạo này trong mô-đun ứng dụng dưới createdJava:

  • AppDatabase_Impl
  • UserDao_Impl

Tôi không hiểu hành vi này vì tham số được cho là tùy chọn, xem https://stackoverflow.com/a/44645943/3258117

5
Pavel 2019-06-18 07:19.

Câu hỏi khá cũ, nhưng tôi đã vấp phải câu hỏi này ngày hôm nay và không có câu trả lời nào được cung cấp giúp tôi. Cuối cùng, tôi đã giải quyết được nó bằng cách nhận thấy rằng tài liệu google thực sự vẫn được sử dụng cho Java chứ không phải Kotlin theo mặc định, thực sự họ đã thêm một nhận xét mà tôi đã bỏ qua

Đối với Kotlin, hãy sử dụng kapt thay vì annotationProcessor

Vì vậy, thay vì

annotationProcessor "androidx.room:room-compiler:$room_version"

Nếu bạn đang phát triển với Kotlin, bạn nên sử dụng:

    kapt "androidx.room:room-compiler:$room_version"
3
Burhanuddin Rashid 2017-10-11 01:37.

Sử dụng liên kết gradle sau:

compile 'android.arch.persistence.room:runtime:1.0.0-alpha9'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0-alpha9'

Bạn cần tạo lớp singloton diffretn và lấy Appdatabase từ ther như sau:

RoomDB.java

public class RoomDB {

private static RoomDB INSTANCE;

public static AppDatabase getInstance(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 = null;
}

App.java

public class App extends Application {

private boolean appRunning = false;

@Override
public void onCreate() {
    super.onCreate();
    RoomDB.getInstance(this); //This will provide AppDatabase Instance
}
2
Farruh Habibullaev 2018-08-23 10:22.

Trong trường hợp của tôi, tôi đang kiểm tra khả năng kết nối cho cơ sở dữ liệu phòng và tôi đã đặt lớp kiểm tra bên trong thư mục mà tôi đã tạo bên trong thư mục AndroidTest. Tôi đã chuyển nó ra khỏi thư mục tùy chỉnh, sau đó nó hoạt động khá tốt.

2
user11221761 2019-03-19 06:07.

Hiện tượng tương tự cũng xảy ra với tôi.

tiếp theo

implementation "android.arch.persistence.room:runtime:1.1.1"

Việc thêm gây ra lỗi xây dựng khác nhưng theo dõi nguyên nhân từ nhật ký.

Trong trường hợp của tôi, đã xảy ra lỗi khi triển khai SQL. Sau khi sửa, bản dựng đã thành công.

Vì vậy, bạn có thể muốn kiểm tra việc thực hiện của toàn bộ thư viện phòng thay vì nhìn vào các địa phương bị rơi.

1
Saurabh Sharma 2018-12-30 21:56.

Vấn đề là nhiều hơn xung quanh thư viện chính xác không được bao gồm trong bản dựng gradle. Tôi đã gặp sự cố tương tự và đã thêm phần còn thiếu

testImplementation "android.arch.persistence.room:testing:$room_version

1
Wajhia Maqsood 2019-11-25 20:49.

Việc thay đổi các phần phụ thuộc trong tệp gradle của tôi không giúp tôi sửa được lỗi.

@Database (các thực thể = [UserModel :: class], version = 1)

Đảm bảo rằng mô hình thực thể được chỉ định trong chú thích ở trên đề cập đến lớp mô hình cụ thể

1
ZakariaBK 2020-03-20 11:05.

Trong ứng dụng kotlin của mình, tôi vừa thêm dòng sau vào đầu tệp build.gradle của mình:

apply plugin: 'kotlin-kapt'

Và dòng sau trong phần phụ thuộc:

kapt "androidx.room:room-compiler:2.2.5"

Tôi hy vọng nó khắc phục được sự cố của bạn.

1
hamid 2020-11-17 00:21.

Dành cho nhà phát triển Kotlin


nếu bạn đã kiểm tra Dao và Thực thể và cũng sử dụng Kapt và không có vấn đề gì, tôi đoán có vấn đề với phiên bản kotlin của bạn nếu bạn đang sử dụng kotlin 1.4 trở lên. cập nhật Phòng lên phiên bản mới nhất từ liên kết này .


2.3.0-alpha03 đã giải quyết vấn đề của tôi.

0
Rujoota Shah 2020-01-09 17:07.

Đối với tôi, Android Studio tự động cập nhật các phần phụ thuộc ngay khi bạn đưa vào bất kỳ dữ liệu nhập nào liên quan đến cơ sở dữ liệu Phòng. Nhưng theo https://developer.android.com/jetpack/androidx/releases/room#decights_dependencies, bạn cần cập nhật một số. Đây là cách cơ sở mã của tôi trông như thế nào:

AppDatabase.kt

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

@Database(entities = arrayOf(MyEntity::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun myDAO(): MyDAO

    companion object {
        @Volatile private var instance: AppDatabase? = null
        private val LOCK = Any()

        operator fun invoke(context: Context)= instance ?: synchronized(LOCK){
            instance ?: buildDatabase(context).also { instance = it}
        }

        private fun buildDatabase(context: Context) = Room.databaseBuilder(context,
            AppDatabase::class.java, "db-name.db")
            .build()
    }
}

Cập nhật build.gradle như được chỉ định trong một trong các câu trả lời:

apply plugin: 'kotlin-kapt' // this goes with other declared plugin at top
dependencies { // add/update the following in dependencies section
    implementation 'androidx.room:room-runtime:2.2.3'
//    annotationProcessor 'androidx.room:room-compiler:2.2.3' // remove this and use the following
    kapt "androidx.room:room-compiler:2.2.3"

}

Đồng bộ hóa gradle và bạn sẽ sẵn sàng.

0
Anibal Itriago 2020-03-11 12:22.

Đọc ví dụ ở đây: Ví dụ về phòng

Tôi đã sửa lỗi này chỉ bằng cách sử dụng đúng (tôi đoán là) annotationProcessorFile, như sau:

annotationProcessor "android.arch.persistence.room:compiler:<latest_version>"

Ngoài ra, tôi đã nâng cấp lên 2.2.0 trong Phiên bản Phòng như trong phiên bản Vòng đời.

Sau khi đồng bộ hóa graddle, tôi có thể bắt đầu làm việc với Room.

Vậy thì chúc may mắn! Và hãy để mã ở bên bạn!

0
artenson.art98 2020-06-26 23:57.

Không phải trong trường hợp OP, nhưng điều này cũng xảy ra khi bạn nhầm lẫn sử dụng thực thi thay vì annotationProcessor như thế này:

implementation "android.arch.persistence.room:compiler:x.x.x"

Thay vì điều này:

annotationProcessor "android.arch.persistence.room:compiler:x.x.x"

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Đây là Tổng thống Trump đe dọa 'trợ cấp' xe điện của GM vì đóng cửa nhà máy

Đây là Tổng thống Trump đe dọa 'trợ cấp' xe điện của GM vì đóng cửa nhà máy

Trump và Giám đốc điều hành GM Mary Barra vào năm 2017. Kể từ khi tin tức nổ ra ngày hôm qua rằng General Motors đang cắt giảm việc làm ở Bắc Mỹ để chuẩn bị cho tương lai điện / xe tự hành / khủng khiếp có thể xảy ra của chúng tôi, gần như tất cả mọi người đã tự hỏi: Tổng thống Trump, người đã vận động tranh cử trên một nền tảng sẽ như thế nào của việc mang lại và duy trì việc làm ô tô của Mỹ, phải nói gì về điều này? Bây giờ chúng ta biết.

Bản vá lỗi tiếp theo của Fallout 76 sẽ mang lại một số bản sửa lỗi cần thiết

Bản vá lỗi tiếp theo của Fallout 76 sẽ mang lại một số bản sửa lỗi cần thiết

Bethesda cho biết ngày hôm nay trên Reddit, Fallout 76 sẽ có một bản vá lớn khác vào ngày 4 tháng 12, sẽ bắt đầu cố gắng khắc phục một số vấn đề lớn hơn của trò chơi. Ngoài ra, công ty cho biết họ có kế hoạch giao tiếp nhiều hơn trong tương lai về những gì nhóm Fallout 76 đang làm việc và khi nào các bản cập nhật mới cho trò chơi sẽ ra mắt.

Mạng lưới bệnh viện Công giáo sẽ không cho phép nhân viên phá thai tại phòng khám ngoài giờ làm việc

Mạng lưới bệnh viện Công giáo sẽ không cho phép nhân viên phá thai tại phòng khám ngoài giờ làm việc

Bạn có biết rằng một trong sáu bệnh nhân ở bệnh viện ở Hoa Kỳ được điều trị tại một cơ sở Công giáo? Và bạn có biết rằng quyền sở hữu của Công giáo hạn chế sâu sắc việc thiết lập các thủ tục y tế có thể được thực hiện trong các bệnh viện này, rõ ràng nhất là khi nói đến chăm sóc sức khỏe sinh sản? Bây giờ NPR báo cáo rằng sự gia tăng của các bệnh viện thuộc Công giáo đang gây khó khăn hơn cho các bác sĩ — những người bị cấm bởi các quy định do Hoa Kỳ viết.

Khói từ đám cháy rừng ở California đã đến tận thành phố New York

Khói từ đám cháy rừng ở California đã đến tận thành phố New York

Đường chân trời San Francisco bị che khuất bởi khói và khói mù do cháy rừng phía sau Đảo Alcatraz, Thứ Tư, ngày 14 tháng 11 năm 2018, ở San Francisco.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language