I'm trying to implement a simple database using Room and Dao, this is what I did
My entity:
public class Note {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "title")
private String title;
}
I have also generated all getters and setters in the entity
but I don't include here because it's very long.
My Dao interface:
@Dao
public interface NoteDAO {
List<Note> getAllNotes();
}
My database class:
@Database(entities = Note.class, version = 1, exportSchema = false)
public abstract class NoteDatabase extends RoomDatabase {
private static NoteDatabase noteDatabase;
public static synchronized NoteDatabase getDatabase(Context context){
if (noteDatabase == null){
noteDatabase = Room.databaseBuilder(
context,
NoteDatabase.class,
);
}
return noteDatabase;
}
}
When I use List<Note> notes
and notes.toString()
, it only shows me the date and time, the title is null
, I also notice that in the Dao interface
, it raises 2 errors which are Cannot resolve symbol notes
and Cannot resolve symbol id
. I don't understand why it doesn't insert to the database. Can someone help me with this problem? Thanks for your help !
The code you have included in your question is fine (after adding the getters and setters) and then using:-
public class MainActivity extends AppCompatActivity {
NoteDatabase db;
NoteDAO dao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = NoteDatabase.getDatabase(this);
dao = db.noteDAO();
Note note1 = new Note();
note1.setTitle("NOTE001");
note1.setDatetime("2022-01-01 10:30");
note1.setSubtitle("The First Note");
note1.setWebsite("www.mynotes.com");
note1.setNoteText("This is the note");
note1.setColor("Black");
note1.setImagePath("notes/note1.jpg");
dao.insertNote(note1);
for (Note n: dao.getAllNotes()) {
Log.d("NOTEINFO","Title is " + n.getTitle() + " Date is " + n.getDatetime() + " blah blah ToString = " + n);
}
}
}
.allowMainThreadQueries
in the databaseBuilder.The result being:-
D/NOTEINFO: Title is NOTE001 Date is 2022-01-01 10:30 blah blah ToString = NOTE001 : 2022-01-01 10:30
However, adding :-
Note note2 = new Note();
//note1.setTitle("NOTE001"); //<<<<<<<<<<< OOOPS
note2.setDatetime("2022-01-01 10:30");
note2.setSubtitle("The Second Note");
note2.setWebsite("www.mynotes.com");
note2.setNoteText("This is the note");
note2.setColor("Black");
note2.setImagePath("notes/note2.jpg");
Results in what you appear to be describing as per:-
D/NOTEINFO: Title is null Date is 2022-01-01 10:30 blah blah ToString = null : 2022-01-01 10:30
I believe you saying
I also notice that in the Dao interface, it raises 2 errors which are Cannot resolve symbol notes and Cannot resolve symbol id
Is perhaps the clue to the cause, which could be that you have the incorrect dependencies you should have 2 for Room:-
implementation 'androidx.room:room-runtime:2.5.0-alpha02'
, andannotationProcessor 'androidx.room:room-compiler:2.5.0-alpha02'
Another possibility is that in addition to the getters and setters you have a constructor that doesn't set correctly the title so it is left as null.