অ্যান্ড্রয়েড রুম অবিচলিত: AppDatabase_Impl বিদ্যমান নেই


148

আমার অ্যাপ্লিকেশন ডাটাবেস ক্লাস

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

গ্রেড লাইব:

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

এবং আমি উদাহরণের জন্য জিজ্ঞাসা করলে এটি এই ত্রুটিটি দেবে, অ্যাপ্লিকেশন ডেটাবেস_আইএমপিএল আমার অ্যাপ্লিকেশন শ্রেণিতে বিদ্যমান নেই

public class APp extends Application {

    private boolean appRunning = false;

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

    }   

}

আপনি সঠিক লগকাট ত্রুটি সরবরাহ করতে পারেন, আপনি পাচ্ছেন?
দেবানজান

1
এর দ্বারা তৈরি: java.lang. রুনটাইম এক্সেপশন: অ্যাপড্যাটাসের জন্য বাস্তবায়ন খুঁজে পাচ্ছে না। অ্যাপডেটিবেস_আইএমপিএল উপস্থিত নেই
প্রতীক দেশাই

আপনি গ্রেডে রুম স্কিমার অবস্থান সরবরাহ করেছেন?
দেবানজান

1
@ প্রতীকদিশাই এই সমস্যার কোন সমাধান পেয়েছেন? আমারও একই সমস্যা হচ্ছে
ক্রুনাল

আমার ক্ষেত্রে আমি কোটলিন প্লাগইনটি ঠিক করার জন্য সরিয়েছি। প্লাগইন প্রয়োগ করুন: 'কোটলিন-ক্যাপ্ট'
নেপোলিয়ান

উত্তর:


304

কোটলিনের সাথে যারা কাজ করছেন তাদের জন্য , অ্যাপগুলিতে পরিবর্তন annotationProcessorকরার চেষ্টা করুনkaptbuild.gradle

উদাহরণ স্বরূপ:

// 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"

এই প্লাগইন যুক্ত করতে মনে রাখবেন

apply plugin: 'kotlin-kapt'

অ্যাপ্লিকেশন স্তরের build.gradle ফাইলের শীর্ষে এবং একটি পরিষ্কার এবং পুনর্নির্মাণ করুন ( https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6 অনুসারে )

অ্যান্ড্রয়েড স্টুডিওতে, আপনি কোডটি পেস্ট করার সময় বা বিল্ড প্রক্রিয়া চলাকালীন যদি ত্রুটিগুলি পান তবে বিল্ড> ক্লিন প্রকল্প নির্বাচন করুন। তারপরে বিল্ড> পুনর্নির্মাণ প্রকল্প নির্বাচন করুন এবং তারপরে আবার বিল্ড করুন।


হালনাগাদ

আপনি যদি অ্যান্ড্রয়েডে স্থানান্তরিত হন

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"

2
অনেক ধন্যবাদ. কেবল কোটলিনে চলে যাওয়া এবং আমার সমস্ত পরীক্ষার কেস ব্যর্থ হতে শুরু করে। আমার মাথা ঠাট্টা করছিল। তারপরে আমি দুর্ঘটনাক্রমে এই মন্তব্যটি দেখেছি। আমার দিন বাঁচিয়েছে
ওজিটি

77
এছাড়াও apply plugin: 'kotlin-kapt'অ্যাপ স্তরের build.gradleফাইলের শীর্ষে যুক্ত করা দরকার
দাকা

1
এটি আমাকে বাঁচিয়েছে .... আমি মনে করি সঠিক ত্রুটি দেখানোর জন্য গুগলের আরও কাজ করা উচিত ... আমার ক্যাপ্ট কল ছিল তবে আমি ক্যাপ্ট-প্লাগইন প্রয়োগ করতে পারি নি
anoop4real

গতকাল থেকেই আটকে ছিল। অনেক ধন্যবাদ. গুগল লোকেরা ডকুমেন্টেশনে এটি উল্লেখ না করে আমি বুঝতে পারি না।
শুভম আনন্দ

আপনি GOAT আমাকে দ্রুত গ্রেড ফিক্স দিয়ে বাঁচিয়েছেন
Fanadez

82

শুধু ব্যবহার

apply plugin: 'kotlin-kapt'

app build.gradle এ rad

এবং উভয় নির্ভরতা মধ্যে রাখুন

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

সম্পাদনা

নতুন সংস্করণে একবারে উভয় নির্ভরতা যুক্ত করার দরকার নেই কেবল ব্যবহার করুন, আশা করি এটি কার্যকর হবে।

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

22

আমি মিস করি যখন এই ত্রুটি ছিল

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

উপরের টীকায় নির্দিষ্ট করা সত্তা মডেলটি নির্দিষ্ট মডেল শ্রেণিকে বোঝায় এবং প্রয়োজনীয় টীকাটিও নিশ্চিত করে:

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

সঠিকভাবে সংজ্ঞায়িত করা হয়েছে এবং আপনি ভাল হবেন


1
স্পষ্টতার জন্য, এটি তত্ক্ষণাত্ ডিবি বর্গ সংজ্ঞা উপরে। এটি আমার সমস্যা স্থির করেছে বলে মনে হয় - ধন্যবাদ!
2'18

19

আপনি যদি ডাটাবেস বাস্তবায়নের জন্য কোটলিন ক্লাস ব্যবহার করছেন তবে ব্যবহার করুন

apply plugin: 'kotlin-kapt'

এবং

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

আপনার গ্রেড ফাইল, এটি কাজ করবে।


এটি অ্যান্ড্রয়েড স্টুডিও 3.5 এ কাজ করে (তবে বর্তমান ঘর
সংকলনের

আমি মনে করি বেশিরভাগ লোকেরা পুরো প্রকল্পে অ্যান্ড্রয়েডেক্স লাইব্রেরি ব্যবহার করছিল না ... আমি কেন ১.১.১ এর পরামর্শ দিয়েছিলাম ... আমি নিজেই সংকলনের সমস্যার মুখোমুখি হয়েছি এবং পুরানো সংস্করণ ব্যবহার করে ন্যূনতম পরিবর্তনগুলি নিয়ে নিরাপদ বোধ করেছি।
নাভালকিশোরব

11

এটি কেবল আপনার নির্ভরতা আপডেট করার জন্য নয়। আপনার সমস্ত রুম নির্ভরতা একই সংস্করণ রয়েছে তা নিশ্চিত করুন।

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"

উপরের নমুনার স্নিপেটে, আমার সমস্ত রুম নির্ভরতাগুলির একই সংস্করণ রয়েছে 1.1.0-alpha2


11

কোটলিন বিকাশকারীদের জন্য

এটা ব্যবহার কর:

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

এবং apply plugin: 'kotlin-kapt'অ্যাপ্লিকেশন স্তরের শীর্ষে যুক্ত করুন build.gradle

জাভা ডেভেলপারদের জন্য

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

বিভিন্ন উত্তর!
পেড্রো ম্যাসাঙ্গো

এ কেমন আছো আলাদা বন্ধু?
প্যাট্রিক প্রকাশ

7

আমি এই সমস্যার মুখোমুখি হয়েছি কারণ আমি যথাযথ নির্ভরতা ভুলে গেছি

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"

এনোটেশন প্রসেসর যুক্ত করার পরে এবং এটি পুনর্নির্মাণ করার পরে, সমস্যার সমাধান।


7

আমি সমস্যার সাথে দেখা করি, কারণ আমি @Daoমন্তব্যটি ভুলে যাই

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

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

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

রুম অফিসিয়াল টিউটোরিয়াল


আমি এটাও ভুলে গেছি। আপনাকে ধন্যবাদ :) তবে এখনও ক্র্যাশ হয়েছে :(
coinhndp

1
কেপট
coinhndp

7

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"

শীর্ষে রেখার নীচে এবং

apply plugin: 'kotlin-kapt'

5

প্রশ্নটি বেশ পুরানো, তবে আমি আজ এই হোঁচট খেয়েছি এবং প্রদত্ত উত্তরের কোনও উত্তরই আমাকে সাহায্য করতে পারেনি। অবশেষে আমি গুগল ডকুমেন্টেশনগুলি এখনও জাভাতে গ্রহণ করা হয়েছে এবং কোটলিনকে ডিফল্টরূপে গ্রহণ না করে তা সমাধান করে পরিচালনা করেছি , আসলে তারা একটি মন্তব্য যুক্ত করেছে যা আমি উপেক্ষা করেছি

কোটলিনের জন্য টীকা প্রোটেসরের পরিবর্তে ক্যাপ্ট ব্যবহার করুন

সুতরাং, পরিবর্তে

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

আপনি যদি কোটলিনের সাথে বিকাশ করছেন তবে আপনার ব্যবহার করা উচিত:

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

4

একই সমস্যা ছিল। অ্যান্ড্রয়েড স্টুডিও দ্বারা নির্মিত একটি নতুন উদাহরণ প্রকল্পে আনুষ্ঠানিকভাবে বলা কয়েকটি ক্লাস এবং ইন্টারফেস বাস্তবায়িত: https://developer.android.com/training/data-stores/room/

উপরের সমস্ত উল্লিখিত সমাধানগুলি কোনও উপকারে আসেনি, আমার ডাটাবেস ক্লাস অনুসারে প্রয়োজনীয় _Impl ফাইলগুলি রুম দ্বারা তৈরি করা হয়নি। অবশেষে টার্মিনালে গ্রেড ক্লিন বিল্ড চালানো আমাকে ইঙ্গিত দেয় যা সমাধানের দিকে নিয়ে যায়:

"সতর্কতা: স্কোমা রফতানি ডিরেক্টরিটি টীকাগুলি প্রসেসরের কাছে সরবরাহ করা হয় না তাই আমরা স্কিমা রফতানি করতে পারি না either আপনি হয় সরবরাহ করতে পারেন room.schemaLocation either

আমি ডাটাবেস ক্লাসে প্যারামিটার এক্সপোর্টশ্মিমা = মিথ্যা যুক্ত করেছি

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

এবং তারপরে এটি কাজ করেছিল, উত্পন্ন জাভা এর অধীনে অ্যাপ্লিকেশন মডিউলে এই দুটি উত্পন্ন ফাইলগুলি খুঁজে পেয়েছিল:

  • AppDatabase_Impl
  • UserDao_Impl

প্যারামিটারটি alচ্ছিক বলে বলা হচ্ছে বলে আমি এই আচরণটি বুঝতে পারি না, https://stackoverflow.com/a/44645943/3258117 দেখুন


1
টার্মিনাল থেকে। / গ্রেডলি ক্লিন বিল্ড চালানো চাবিকাঠি। আমার জন্য আমি এই বার্তাটি পেয়েছি: অ্যাপ: 'এনোটেশনপ্রসেসর' নির্ভরতাগুলি ক্যাপ্ট অ্যানোটেশন প্রসেসর হিসাবে স্বীকৃত হবে না। দয়া করে এই নিদর্শনগুলির জন্য কনফিগারেশনের নামটি 'ক্যাপ্ট' এ পরিবর্তন করুন: 'android.arch.lifecycle: সংকলক: 1.1.1' এবং ক্যাপ্ট প্লাগইন প্রয়োগ করুন: "প্লাগইন প্রয়োগ করুন: 'কোটলিন-ক্যাপ্ট'"।
র্যান্ডি

হ্যাঁ হ্যাঁ, টার্মিনালে কাজগুলি সম্পাদন করাও অতীতে আমাকে অনেক সহায়তা করেছিল। আইডিইতে বিল্ড টুলস বার্তাগুলি প্রায়শই মূল ত্রুটির বার্তাটি "লুকান"
হাজো

3

নিম্নলিখিত গ্রেড লিঙ্কটি ব্যবহার করুন:

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

আপনাকে ডিফ্রেটেন সিঙ্গলোটন ক্লাস তৈরি করতে হবে এবং অ্যাপ্লিকেশনটি ডেটাবেস থেকে এখান থেকে পেতে হবে:

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
}

আমি কনস্ট্রাক্টর তৈরি করিনি, আমি সরাসরি স্থির উদাহরণের মাধ্যমে ব্যবহার করছি।
প্রতীক দেশাই

আমি রুম ডাটাবেসের জন্য একটি নমুনা প্রকল্প তৈরি করেছি আপনি এটি এখানে পরীক্ষা করতে পারেন: github.com/burhanrashid52/Android- রুমেডাটা- পার্সিং
বুরহানউদ্দিন রশিদ

2
হ্যাঁ আমি আপডেট করেছি তবে একই ত্রুটি, আপডেট ডাটাবেস_আইএমপিএল উপস্থিত নেই
প্রতীক দেশাই

@ প্রকটিকেশাই: আপনি কি ত্রুটিটি ঠিক করেছেন ?? আমিও একই ত্রুটি পেয়েছি, এই কারণে আটকে যাই।
জয়েশ

2

আমার ক্ষেত্রে, আমি রুম ডাটাবেসের জন্য সংযোগটি পরীক্ষা করছিলাম এবং আমি অ্যান্ড্রয়েড টেস্ট ফোল্ডারের ভিতরে যে ডিরেক্টরিটি তৈরি করেছি সেটির ভিতরে আমি পরীক্ষার ক্লাসটি রেখেছি। আমি এটি কাস্টম ডিরেক্টরি থেকে সরিয়ে নিয়েছি, তারপর এটি বেশ ভাল কাজ করেছে।


এটিও আমার সমস্যা। কেন এমন হচ্ছে এবং কীভাবে এড়ানো যায় তার কোনও ধারণা? আমি বরং TestDatabaseরিলিজ কোডটি না রাখাই পছন্দ করি ।
এডুয়ার্ডো

2

আমার কাছেও একই ঘটনা ঘটেছিল।

অনুসরণ

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

যোগ করার ফলে অন্য বিল্ড ত্রুটির কারণ হয় কিন্তু লগ থেকে কারণটি ট্র্যাক করে।

আমার ক্ষেত্রে, এসকিউএল বাস্তবায়নে একটি ত্রুটি ছিল। ফিক্সিংয়ের পরে, বিল্ডটি সফল হয়েছিল।

সুতরাং আপনি ক্র্যাশ হওয়া স্থানীয়দের দিকে না তাকিয়ে পুরো ঘরের লাইব্রেরির প্রয়োগ পরীক্ষা করতে চাইতে পারেন।


1

সমস্যাটি সঠিক গ্রন্থাগারের আশেপাশে যা গ্রেড বিল্ডের অন্তর্ভুক্ত নয় around আমার অনুরূপ সমস্যা ছিল এবং আমি অনুপস্থিত যোগ করেছি

পরীক্ষার প্রয়োগ "অ্যান্ড্রয়েড.আরচ.স্পারসিটি.রুম: টেস্টিং: রুম - রূপান্তর


1

আমার গ্রেড ফাইলে নির্ভরতা পরিবর্তন করা ত্রুটি সমাধানে আমাকে সহায়তা করে না Room আমি ক্লাসে এই ডাটাবেস টীকাটি মিস করেছি যেখানে রুম ডাটাবেস শুরু হয়েছিল যা এই সমস্যার কারণ হয়ে দাঁড়িয়েছিল।

@ ডেটাবেস (সত্তা = [ব্যবহারকারীমোডেল :: শ্রেণি], সংস্করণ = 1)

নিশ্চিত করুন যে উপরের টীকায় নির্দিষ্ট করা সত্তা মডেল নির্দিষ্ট মডেল শ্রেণিকে বোঝায়


এই আমি মিস করেছি
pjwin

0

আমার জন্য, অ্যান্ড্রয়েড স্টুডিওর সাথে আপনি কোনও রুম ডাটাবেস সম্পর্কিত আমদানি অন্তর্ভুক্ত করার সাথে সাথে স্বয়ংক্রিয়ভাবে নির্ভরতা আপডেট করে। তবে https://developer.android.com/jetpack/androidx/releases/room#declaring_d dependferences অনুযায়ী আপনাকে কয়েকটি আপডেট করতে হবে। এখানে আমার কোড-বেসটি কেমন দেখাচ্ছে:

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()
    }
}

উত্তরগুলির মধ্যে একটিতে বর্ণিত বিল্ডড্রেডল আপডেট করুন:

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"

}

গ্রেড সিঙ্ক করুন এবং আপনার যেতে ভাল হওয়া উচিত।


0

উদাহরণটি এখানে পড়ছেন: ঘরের উদাহরণ

আমি এই ত্রুটিটি ঠিক (সঠিকভাবে অনুমান করি) এনোটেশনপ্রসেসরফাইলে নীচে ব্যবহার করে ঠিক করেছি:

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

এছাড়াও, আমি লাইফাইকেল সংস্করণ হিসাবে রুম সংস্করণে 2.2.0 এ আপগ্রেড করেছি।

একবার গ্রেডডল সিঙ্ক্রোনাইজ হয়ে গেলে, আমি রুমের সাথে কাজ শুরু করতে পারি।

সুতরাং ভালো থাকুন! এবং কোডটি আপনার সাথে থাকুক!


0

আমার কোটলিন অ্যাপে, আমি আমার বিল্ডড্র্যাডল ফাইলের শীর্ষে স্রেফ নিম্নলিখিত লাইনটি যুক্ত করেছি:

apply plugin: 'kotlin-kapt'

এবং নির্ভরতা বিভাগে নিম্নলিখিত লাইন:

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

আমি আশা করি এটি আপনার সমস্যা সমাধান করেছে।


0

ওপি-র ক্ষেত্রে নয়, আপনি যখন ভুলভাবে এ্যানোটেশন প্রোটেসরের পরিবর্তে বাস্তবায়ন ব্যবহার করেন তখন এটিও ঘটে :

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

এর পরিবর্তে:

annotationProcessor "android.arch.persistence.room:compiler:x.x.x"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.