मैं अपने नए ऐप के लिए कक्ष का उपयोग करने की कोशिश कर रहा हूं। लेकिन जब भी मैं अपना ऐप पुनरारंभ करता हूं, तो मैं पुराना डेटा पुनर्प्राप्त करने में असमर्थ हूं। ऐसा लगता है कि मेरा ऐप हर बार डेटाबेस का एक नया उदाहरण बना रहा है, लेकिन मुझे यकीन नहीं है कि क्यों। एमवीपी पैटर्न के आधार पर मेरी कक्षाएं यहां दी गई हैं।आवेदन खाली करने के बाद कक्ष खाली डीबी
संपादित करें: मैंने अभी दोबारा जांच की है और मैं देख सकता हूं कि एंटी-जेनरेट आईडी (एंटोमिड) के लिए ऑटो-जेनरेट आईडी (1 पर रीसेट नहीं होता है, लेकिन जब मैं डेटा पुनर्प्राप्त करता हूं तो मुझे केवल उस सत्र में संग्रह मिलता है।
दाव
@Dao
public interface MyDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
List<Long> insertModels(List<MyModel> models);
@Query("SELECT * FROM MyModel")
List<MyModel> getModels();
}
डाटाबेस
@Database(entities = {MyModel.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
public abstract MyDao myDao();
}
DatabaseModule
@Module
public class DatabaseModule {
@Provides
@Singleton
MyDatabase provideMyDatabase(Application context) {
return Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, "MyDB").build();
}
@Provides
@Singleton
MyDao provideMyDao(MyDatabase myDatabase) {
return myDatabase.myDao();
}
}
डेटा स्रोत
@Singleton
public class MyDataSource {
MyDao mMyDao;
@Inject
public MyDataSource(@NonNull MyDao myDao) {
mMyDao = myDao;
}
}
भंडार
@Singleton
public class MyRepository {
private final MyDataSource mMyDataSource;
@Inject
MyRepository(@Local MyDataSource myDataSource) {
mMyDataSource = myDataSource;
}
}
ApplicationComponent
@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, ApplicationModule.class, DatabaseModule.class})
public interface ApplicationComponent extends AndroidInjector<MyApp> {
@Component.Builder
interface Builder {
@BindsInstance
Builder application(Application application);
ApplicationComponent build();
}
}
अनुप्रयोग
public class MyApp extends DaggerApplication {
private ApplicationComponent mApplicationComponent;
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
mApplicationComponent = DaggerApplicationComponent.builder().application(this).build();
return mApplicationComponent;
}
}
क्या आप यकीन है कि आप किसी भी तरह नहीं कर रहे हैं:
वैसे भी यहां इस बारे में गूगल नमूना GitHub के लिए एक लिंक है माइग्रेशन तंत्र को ट्रिगर करना? कक्ष डॉक्स में यह एक चीज है जो मुझे बताती है: सावधानी: यदि आप आवश्यक माइग्रेशन प्रदान नहीं करते हैं, तो कक्ष डेटाबेस को पुनर्निर्माण करता है, जिसका अर्थ है कि आप डेटाबेस में अपना सभी डेटा खो देंगे। (https://developer.android.com/training/data-storage/room/migrating-db-versions.html) –
नहीं, यह संस्करण 1 है। इसके अलावा, मैं ऐप को दोबारा इंस्टॉल नहीं कर रहा हूं, बस इसे पुनरारंभ कर रहा हूं । – fR0DDY
क्या आप वाकई डीबी में सफलतापूर्वक डाले जा रहे हैं? आप परीक्षण केस भी लिखने का प्रयास कर सकते हैं जिससे यह सुनिश्चित हो सके कि डेटा सफलतापूर्वक डाला गया है और सफलतापूर्वक पुनर्प्राप्त किया गया है। – Gautam