Room、DB 和 DAO 需要在同一个包中吗?

huangapple go评论151阅读模式
英文:

Does Room, DB and DAO need to be in the same package?

问题

I see that you've provided code for your Android application along with an exception log. It seems like you are encountering an issue related to your Room database setup. If you have any specific questions or need assistance with a particular part of the code, please feel free to ask.

英文:

Im having a hard time creating a database for my login UI. Currently using a local DB with room just to start testing. I will set up a rest api and remote db later once done testing. While I have been able to get it to work on other tutorials, it appears the classes are all in the same package. With my current application I am building, I separated my packages into the types of classes they are / what they are used for I.E. Activities, Fragments, DAOs, ViewModels, Interfaces, Adapters etc. Everything works fine up until I try to initialize the db in my viewmodel. Using the debugger I can see that INSTANCE is null during the getDatabase function all the way up until the .build() and that is where it crashes.

Here is the exception log:

  1. E/AndroidRuntime: FATAL EXCEPTION: main
  2. Process: com.example.whatever, PID: 13042
  3. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.whatever/com.example.whatever.activities.LoginActivity}: java.lang.RuntimeException: Cannot create an instance of class com.example.whatever.viewModels.ViewModelEmailLogin
  4. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
  5. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
  6. at android.app.ActivityThread.-wrap14(ActivityThread.java)
  7. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
  8. at android.os.Handler.dispatchMessage(Handler.java:102)
  9. at android.os.Looper.loop(Looper.java:154)
  10. at android.app.ActivityThread.main(ActivityThread.java:6682)
  11. at java.lang.reflect.Method.invoke(Native Method)
  12. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1534)
  13. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1424)
  14. Caused by: java.lang.RuntimeException: Cannot create an instance of class com.example.whatever.viewModels.ViewModelEmailLogin
  15. at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:275)
  16. at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
  17. at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
  18. at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
  19. at com.example.whatever.ui.fragments.EmailLoginFragment.onCreateView(EmailLoginFragment.java:74)
  20. at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
  21. at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
  22. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
  23. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
  24. at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
  25. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
  26. at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617)
  27. at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569)
  28. at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
  29. at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
  30. at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
  31. at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1256)
  32. at android.app.Activity.performStart(Activity.java:6959)
  33. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2890)
  34. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) 
  35. at android.app.ActivityThread.-wrap14(ActivityThread.java) 
  36. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) 
  37. at android.os.Handler.dispatchMessage(Handler.java:102) 
  38. at android.os.Looper.loop(Looper.java:154) 
  39. at android.app.ActivityThread.main(ActivityThread.java:6682) 
  40. at java.lang.reflect.Method.invoke(Native Method) 
  41. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1534) 
  42. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1424) 
  43. Caused by: java.lang.reflect.InvocationTargetException
  44. at java.lang.reflect.Constructor.newInstance0(Native Method)
  45. at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
  46. at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267)
  47. at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) 
  48. at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) 
  49. at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 
  50. at com.example.whatever.ui.fragments.EmailLoginFragment.onCreateView(EmailLoginFragment.java:74) 
  51. at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) 
  52. at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310) 
  53. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185) 
  54. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354) 
  55. at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432) 
  56. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495) 
  57. at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617) 
  58. at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569) 
  59. at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247) 
  60. at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541) 
  61. at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201) 
  62. at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1256) 
  63. at android.app.Activity.performStart(Activity.java:6959) 
  64. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2890) 
  65. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) 
  66. at android.app.ActivityThread.-wrap14(ActivityThread.java) 
  67. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) 
  68. at android.os.Handler.dispatchMessage(Handler.java:102) 
  69. at android.os.Looper.loop(Looper.java:154) 
  70. at android.app.ActivityThread.main(ActivityThread.java:6682) 
  71. at java.lang.reflect.Method.invoke(Native Method) 
  72. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1534) 
  73. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1424) 
  74. Caused by: java.lang.RuntimeException: cannot find implementation for com.example.whatever.db.WhatEverUserDB. WhatEverUserDB_Impl does not exist
  75. at androidx.room.Room.getGeneratedImplementation(Room.java:94)
  76. at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:952)
  77. at com.example.whatever.db.WhatEverUserDB.getDatabase(WhatEverUserDB.java:45)
  78. at com.example.whatever.repositories.WhatEverUserRepo.<init>(WhatEverUserRepo.java:33)
  79. at com.example.whatever.viewModels.ViewModelEmailLogin.<init>(ViewModelEmailLogin.java:31)
  80. at java.lang.reflect.Constructor.newInstance0(Native Method) 
  81. at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
  82. at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:267) 
  83. at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106) 
  84. at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185) 
  85. at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 
  86. at com.example.whatever.ui.fragments.EmailLoginFragment.onCreateView(EmailLoginFragment.java:74) 
  87. at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698) 
  88. at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310) 
  89. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185) 
  90. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354) 
  91. at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432) 
  92. at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495) 
  93. at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2617) 
  94. at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2569) 
  95. at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247) 
  96. at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541) 
  97. at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201) 
  98. at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1256) 
  99. at android.app.Activity.performStart(Activity.java:6959) 
  100. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2890) 
  101. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) 
  102. at android.app.ActivityThread.-wrap14(ActivityThread.java) 
  103. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) 
  104. at android.os.Handler.dispatchMessage(Handler.java:102) 
  105. at android.os.Looper.loop(Looper.java:154) 
  106. at android.app.ActivityThread.main(ActivityThread.java:6682) 
  107. at java.lang.reflect.Method.invoke(Native Method) 
  108. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1534) 
  109. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1424) 
  110. D/NetworkSecurityConfig: No Network Security Config specified, using platform default

Model

  1. package com.example.whatever.db;
  2. import androidx.room.Entity;
  3. import androidx.room.PrimaryKey;
  4. // This is an object used to create a WhatEver User
  5. //debating if we should use WhatEver user to link to other social media accounts
  6. // we could create lists of social sites with accounts that gather the info from the db
  7. import java.util.List;
  8. @Entity(tableName = "whatever_user_table")
  9. public class WhatEverUser {
  10. @PrimaryKey(autoGenerate = true)// with each new row we add to the db, room will automatically create a new id
  11. private int ID;
  12. private CharSequence Username;
  13. private CharSequence Email;
  14. private CharSequence Password;
  15. public WhatEverUser(CharSequence Username, CharSequence Email, CharSequence Password){
  16. this.Username = Username;
  17. this.Email = Email;
  18. this.Password = Password;
  19. }
  20. public CharSequence getPassword() {
  21. return Password;
  22. }
  23. public CharSequence getEmail() {
  24. return Email;
  25. }
  26. public CharSequence getUsername() {
  27. return Username;
  28. }
  29. public int getID() {
  30. return ID;
  31. }
  32. public void setUsername(CharSequence username) {
  33. this.Username = username;
  34. }
  35. public void setPassword(CharSequence password) {
  36. Password = password;
  37. }
  38. public void setID(int ID) {
  39. this.ID = ID;
  40. }
  41. public void setEmail(CharSequence email) {
  42. this.Email = email;
  43. }
  44. }

DB

  1. package com.example.whatever.db;
  2. import android.content.Context;
  3. import androidx.annotation.NonNull;
  4. import androidx.room.Room;
  5. import androidx.room.RoomDatabase;
  6. import androidx.room.Database;
  7. import androidx.sqlite.db.SupportSQLiteDatabase;
  8. import com.example.whatever.interfaces.WhatEverUserDAO;
  9. import com.example.whatever.db.WhatEverUser;
  10. import java.util.concurrent.ExecutorService;
  11. import java.util.concurrent.Executors;
  12. @Database(entities = {WhatEverUser.class},version = 1)
  13. public abstract class WhatEverUserDB extends RoomDatabase {
  14. private static volatile WhatEverUserDB INSTANCE; // this is an instance of our database
  15. public abstract WhatEverUserDAO whatEverUserDAO(); //we use this method to access our dao
  16. // we use this method to access our db methods in the dao
  17. private static final int NUMBER_OF_THREADS = 4;
  18. static final ExecutorService databaseWriteExecutor =
  19. Executors.newFixedThreadPool(NUMBER_OF_THREADS);
  20. public static WhatEverUserDB getDatabase(final Context context){
  21. if (INSTANCE == null){
  22. synchronized (WhatEverUserDB.class){
  23. if (INSTANCE == null){
  24. INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
  25. WhatEverUserDB.class,
  26. "whatever_user_table")
  27. .allowMainThreadQueries()
  28. .addCallback(roomCallback)
  29. .build();
  30. }
  31. }
  32. }
  33. return INSTANCE;
  34. }
  35. private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback(){
  36. @Override
  37. public void onOpen(@NonNull SupportSQLiteDatabase db) {
  38. super.onOpen(db);
  39. databaseWriteExecutor.execute(() -> {
  40. WhatEverUserDAO whatEverUserDAO = INSTANCE.whatEverUserDAO();
  41. WhatEverUser admin = new WhatEverUser("admin","admin@admin.com","password");
  42. whatEverUserDAO.insertUser(admin);
  43. WhatEverUser test1 = new WhatEverUser("test1","test1@test1.com","test1234");
  44. whatEverUserDAO.insertUser(test1);
  45. });
  46. }
  47. };
  48. }
  49. //creating the database
  50. /* public static synchronized whatEverUserDB getInstance(final Context context){ //we create our only db instance, synchronized means only one thread can access this db at a time.
  51. if (instance == null){
  52. instance = Room.databaseBuilder(context.getApplicationContext(), whatEverUserDB.class, "whatever_user_database")
  53. //.enableMultiInstanceInvalidation()
  54. //.allowMainThreadQueries()
  55. .fallbackToDestructiveMigration() //if we don't do this and try to increase the version, the app will crash, this avoids this by deleting the tables and starting from scratch
  56. //.addCallback(roomCallback)
  57. .build();
  58. }
  59. return instance;
  60. }
  61. */
  62. /* private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback(){
  63. @Override
  64. public void onCreate(@NonNull SupportSQLiteDatabase db) {
  65. super.onCreate(db);
  66. // new PopulateDBAsyncTask(instance).execute();
  67. }
  68. };
  69. private static class PopulateDBAsyncTask extends AsyncTask<Void, Void, Void> { // Creating this async task to populate the db for test users
  70. private WhatEverUserDAO whatEverUserDAO;
  71. private PopulateDBAsyncTask(whatEverUserDB db){
  72. whatEverUserDAO = db.whatEverUserDAO();
  73. }
  74. @Override
  75. protected Void doInBackground(Void... voids) {
  76. whatEverUserDAO.insertUser(new WhatEverUser("admin","admin@admin.com","password"));
  77. whatEverUserDAO.insertUser(new WhatEverUser("test1","admin1@admin.com","password"));
  78. whatEverUserDAO.insertUser(new WhatEverUser("test2","admin2@admin.com","password"));
  79. return null;
  80. }
  81. }
  82. */
  83. // must extend roomDb and be abstract
  84. // version must be changed every time we create a new db from scratch
  85. // we should not leave userDB on devices, this will eventually need to be grabbed from our own sql server so this class may be removed later TODO

DAO

  1. package com.example.whatever.db;
  2. import android.content.Context;
  3. import androidx.annotation.NonNull;
  4. import androidx.room.Room;
  5. import androidx.room.RoomDatabase;
  6. import androidx.room.Database;
  7. import androidx.sqlite.db.SupportSQLiteDatabase;
  8. import com.example.whatever.interfaces.WhatEverUserDAO;
  9. import com.example.whatever.db.WhatEverUser;
  10. import java.util.concurrent.ExecutorService;
  11. import java.util.concurrent.Executors;
  12. @Database(entities = {WhatEverUser.class},version = 1)
  13. public abstract class WhatEverUserDB extends RoomDatabase {
  14. private static volatile WhatEverUserDB INSTANCE; // this is an instance of our database
  15. public abstract WhatEverUserDAO whatEverUserDAO(); //we use this method to access our dao
  16. // we use this method to access our db methods in the dao
  17. private static final int NUMBER_OF_THREADS = 4;
  18. static final ExecutorService databaseWriteExecutor =
  19. Executors.newFixedThreadPool(NUMBER_OF_THREADS);
  20. public static WhatEverUserDB getDatabase(final Context context){
  21. if (INSTANCE == null){
  22. synchronized (WhatEverUserDB.class){
  23. if (INSTANCE == null){
  24. INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
  25. WhatEverUserDB.class,
  26. "whatever_user_table")
  27. .allowMainThreadQueries()
  28. .addCallback(roomCallback)
  29. .build();
  30. }
  31. }
  32. }
  33. return INSTANCE;
  34. }
  35. private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback(){
  36. @Override
  37. public void onOpen(@NonNull SupportSQLiteDatabase db) {
  38. super.onOpen(db);
  39. databaseWriteExecutor.execute(() -> {
  40. WhatEverUserDAO whatEverUserDAO = INSTANCE.whatEverUserDAO();
  41. WhatEverUser admin = new WhatEverUser("admin","admin@admin.com","password");
  42. whatEverUserDAO.insertUser(admin);
  43. WhatEverUser test1 = new WhatEverUser("test1","test1@test1.com","test1234");
  44. whatEverUserDAO.insertUser(test1);
  45. });
  46. }
  47. };
  48. }
  49. //creating the database
  50. /* public static synchronized whatEverUserDB getInstance(final Context context){ //we create our only db instance, synchronized means only one thread can access this db at a time.
  51. if (instance == null){
  52. instance = Room.databaseBuilder(context.getApplicationContext(), whatEverUserDB.class, "whatever_user_database")
  53. //.enableMultiInstanceInvalidation()
  54. //.allowMainThreadQueries()
  55. .fallbackToDestructiveMigration() //if we don't do this and try to increase the version, the app will crash, this avoids this by deleting the tables and starting from scratch
  56. //.addCallback(roomCallback)
  57. .build();
  58. }
  59. return instance;
  60. }
  61. */
  62. /* private static RoomDatabase.Callback roomCallback = new RoomDatabase.Callback(){
  63. @Override
  64. public void onCreate(@NonNull SupportSQLiteDatabase db) {
  65. super.onCreate(db);
  66. // new PopulateDBAsyncTask(instance).execute();
  67. }
  68. };
  69. private static class PopulateDBAsyncTask extends AsyncTask<Void, Void, Void> { // Creating this async task to populate the db for test users
  70. private WhatEverUserDAO whatEverUserDAO;
  71. private PopulateDBAsyncTask(whatEverUserDB db){
  72. whatEverUserDAO = db.whatEverUserDAO();
  73. }
  74. @Override
  75. protected Void doInBackground(Void... voids) {
  76. whatEverUserDAO.insertUser(new WhatEverUser("admin","admin@admin.com","password"));
  77. whatEverUserDAO.insertUser(new WhatEverUser("test1","admin1@admin.com","password"));
  78. whatEverUserDAO.insertUser(new WhatEverUser("test2","admin2@admin.com","password"));
  79. return null;
  80. }
  81. }
  82. */
  83. // must extend roomDb and be abstract
  84. // version must be changed every time we create a new db from scratch
  85. // we should not leave userDB on devices, this will eventually need to be grabbed from our own sql server so this class may be removed later TODO

Repo

  1. package com.example.whatever.repositories;
  2. import android.app.Application;
  3. import android.os.AsyncTask;
  4. import android.util.Log;
  5. import android.view.View;
  6. import com.example.whatever.db.WhatEverUser;
  7. import com.example.whatever.db.WhatEverUserDB;
  8. import com.example.whatever.interfaces.WhatEverUserDAO;
  9. import androidx.lifecycle.LiveData;
  10. // UserRepo connects the view model to the room. Transmits LiveData from room to ViewModel
  11. // takes requests from ViewModel
  12. // This class is not necessary but recommended , it provides an abstraction between the db and vm
  13. // Repo can grab data from the SQLite db or an internet resource
  14. // REPO can make API calls
  15. // The viewModel calls methods from the repo directly
  16. // The repo calls methods from the DAO
  17. public class WhatEverUserRepo {
  18. private static final String TAG = "MainActivity";
  19. private WhatEverUserDAO whatEverUserDao;
  20. private LiveData userName;
  21. private LiveData userPassword;
  22. public WhatEverUserRepo(Application application){
  23. WhatEverUserDB database = WhatEverUserDB.getDatabase(application);
  24. whatEverUserDao = database.whatEverUserDAO();
  25. //userName = whatEverUserDao.getUsername();
  26. }
  27. public void setUserName(LiveData whatEverUserName){
  28. userName = whatEverUserName;
  29. }
  30. public void getUserName(WhatEverUser whatEverUser){
  31. }
  32. public void insertUserName(String userName){
  33. }
  34. public void getUserEmail(String whatEverUserEmail){
  35. }
  36. public void insertUserEmail(String whatEverUserEmail){
  37. }
  38. public void insertUserPassword(String userPassword){
  39. }
  40. /* public LiveData<String> getUserName() {
  41. return userName;
  42. }*/
  43. // we will need to copy this method and use it in each public method above for each action
  44. private static class getUserAsyncTask extends AsyncTask<WhatEverUser,Void, Void> {
  45. private WhatEverUserDAO wUserDAO ;
  46. private WhatEverUser whatEverUser;
  47. private getUserAsyncTask(WhatEverUser whatEverUser){
  48. this.wUserDAO = wUserDAO;
  49. }
  50. @Override
  51. protected Void doInBackground(WhatEverUser... whatEverUser) {
  52. //wUserDAO.getUsername();
  53. return null;
  54. }
  55. }
  56. public void startThread(View view){
  57. for (int i = 0; i < 10; i++){
  58. Log.d(TAG,"startThread: " + i);
  59. try {
  60. Thread.sleep(1000);
  61. }catch (InterruptedException e){
  62. e.printStackTrace();
  63. }
  64. }
  65. }
  66. public void stopThread(View view){
  67. }
  68. }

ViewModel

  1. package com.example.whatever.viewModels;
  2. import android.app.Application;
  3. import android.util.Log;
  4. import androidx.annotation.NonNull;
  5. import androidx.lifecycle.AndroidViewModel;
  6. import androidx.lifecycle.LiveData;
  7. import androidx.lifecycle.MutableLiveData;
  8. import com.example.whatever.db.WhatEverUser;
  9. import com.example.whatever.repositories.WhatEverUserRepo;
  10. public class ViewModelEmailLogin extends AndroidViewModel {
  11. private static final String TAG = "WhatEverLogState";
  12. private WhatEverUserRepo whatEverUserRepo;
  13. private MutableLiveData<WhatEverUser> whatEverUser;
  14. private MutableLiveData<CharSequence> UserName = new MutableLiveData<>();
  15. private MutableLiveData<CharSequence> uPassword = new MutableLiveData<>();
  16. private MutableLiveData<CharSequence> UserEmail = new MutableLiveData<>();
  17. private MutableLiveData<WhatEverUser> WhatEverUser = new MutableLiveData<>();
  18. public ViewModelEmailLogin(@NonNull Application application) {
  19. super(application);
  20. Log.i(TAG, "Instanced");
  21. whatEverUserRepo = new WhatEverUserRepo(application);
  22. Log.i(TAG, "Set whatEverUserRepo");
  23. LiveData<WhatEverUser> whatEverUserLiveData; // not sure what this is for
  24. LiveData<CharSequence>UserEmail;
  25. LiveData<CharSequence>UserPassword;
  26. }
  27. }

and Gradle

  1. apply plugin: 'com.android.application'
  2. //apply plugin: 'kotlin-android'
  3. //apply plugin: 'kotlin-kapt'
  4. //apply plugin: 'kotlin-android-extensions'
  5. android {
  6. compileSdkVersion 29
  7. buildToolsVersion "29.0.2"
  8. defaultConfig {
  9. applicationId "com.example.whatever"
  10. minSdkVersion 24
  11. targetSdkVersion 29
  12. versionCode 1
  13. versionName "1.0"
  14. testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  15. }
  16. buildFeatures{
  17. dataBinding true
  18. }
  19. buildTypes {
  20. release {
  21. minifyEnabled false
  22. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
  23. }
  24. }
  25. compileOptions {
  26. sourceCompatibility JavaVersion.VERSION_1_8
  27. targetCompatibility JavaVersion.VERSION_1_8
  28. }
  29. }
  30. dependencies {
  31. def lifecycle_version = '2.2.0'
  32. def room_version = '2.2.5'
  33. implementation fileTree(dir: 'libs', include: ['*.jar'])
  34. implementation 'androidx.appcompat:appcompat:1.1.0'
  35. implementation "com.google.android.material:material:1.1.0"
  36. implementation 'androidx.cardview:cardview'
  37. implementation 'androidx.recyclerview:recyclerview'
  38. implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
  39. implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  40. implementation 'com.google.android.material:material:1.1.0'
  41. implementation 'androidx.annotation:annotation:1.1.0'
  42. implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
  43. testImplementation 'junit:junit:4.12'
  44. androidTestImplementation 'androidx.test.ext:junit:1.1.1'
  45. androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
  46. implementation 'androidx.gridlayout:gridlayout:1.0.0'
  47. implementation 'com.twitter.sdk.android:twitter:3.1.1'
  48. implementation 'com.twitter.sdk.android:twitter-core:3.1.1'
  49. //lifecycle components
  50. implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
  51. annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"
  52. // LiveData
  53. implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
  54. // Room Components
  55. implementation "androidx.room:room-runtime:$room_version"
  56. implementation "androidx.core:core-ktx:+"
  57. implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
  58. // implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  59. //kapt "androidx.arch.persistence.room:compiler$room_version"
  60. // kapt "androidx.room:room-compiler:2.2.5"
  61. }
  62. repositories {
  63. mavenCentral()
  64. }

答案1

得分: 2

根据房间设置说明,构建依赖项必须包括:

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

英文:

As indicated in the Room setup instructions, the build dependencies must include:

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

huangapple
  • 本文由 发表于 2020年7月30日 02:37:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/63160302.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定