Android mvvm模型中带有recyclerview的空白页
我是个新手,遇到了一个问题,我得到了一个错误,而不是一个recyclerviewAndroid mvvm模型中带有recyclerview的空白页,android,kotlin,android-activity,mvvm,android-recyclerview,Android,Kotlin,Android Activity,Mvvm,Android Recyclerview,我是个新手,遇到了一个问题,我得到了一个错误,而不是一个recyclerview java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.vernaljobs/com.example.vernaljobs.NoteMain}: kotlin.KotlinNullPointerException at android.app.ActivityThread.performLaunc
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.vernaljobs/com.example.vernaljobs.NoteMain}: kotlin.KotlinNullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
我的recyclerview没有显示,尝试通过“添加按钮”插入一个也不会给出任何结果
class NoteMain : AppCompatActivity() {
private var noteViewModel: NoteViewModel? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_note_main)
val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
recyclerView.setHasFixedSize(true)
val adapter = NoteAdapter()
recyclerView.adapter = adapter
noteViewModel = ViewModelProviders.of(this).get(NoteViewModel(application)::class.java)
error-> noteViewModel!!.getAllNotes()!!.observe(this,
Observer {notes -> adapter.setNotes(notes) })
}
}
class-NoteMain:AppCompatActivity(){
私有变量noteViewModel:noteViewModel?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u note\u main)
val recyclerView=findviewbyd(R.id.recycler\u视图)
recyclerView.layoutManager=LinearLayoutManager(此)
recyclerView.setHasFixedSize(真)
val adapter=NoteAdapter()
recyclerView.adapter=适配器
noteViewModel=ViewModelProviders.of(this.get)(noteViewModel(应用程序)::class.java)
错误->noteViewModel!!.getAllNotes()!!。观察(此,
观察者{notes->adapter.setNotes(notes)})
}
}
还有我的数据库文件,我在其中列出了我想要检索的3个元素
@Database(entities = [Note::class], version = 1)
abstract class NoteDatabase : RoomDatabase() {
abstract fun noteDao(): NoteDao
class PopulateDbAsyncTask(db: NoteDatabase) : AsyncTask<Void, Void, Void>() {
private val noteDao: NoteDao = db.noteDao()
override fun doInBackground(vararg voids: Void): Void? {
noteDao.insert(Note("Title 1", "Description 1", 1))
noteDao.insert(Note("Title 2", "Description 2", 2))
noteDao.insert(Note("Title 3", "Description 3", 3))
return null
}
}
companion object {
private lateinit var instance: NoteDatabase
@Synchronized
fun getInstance(context: Context): NoteDatabase {
return instance
}
private val roomCallback = object : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
PopulateDbAsyncTask(instance).execute()
}
}
}
}
@数据库(实体=[Note::class],版本=1)
抽象类NoteDatabase:RoomDatabase(){
抽象趣味noteDao():noteDao
类PopulateDbAsyncTask(db:NoteDatabase):AsyncTask(){
private val noteDao:noteDao=db.noteDao()
覆盖有趣的背景(vararg voids:Void):Void{
注D.插入(注(“标题1”、“说明1”、1))
注D.插入(注(“标题2”、“说明2”、2))
注D.插入(注(“标题3”,“说明3”,3))
返回空
}
}
伴星{
私有lateinit变量实例:NoteDatabase
@同步的
fun getInstance(上下文:context):NoteDatabase{
返回实例
}
private val roomCallback=对象:RoomDatabase.Callback(){
重写FunonCreate(db:SupportSQLiteDatabase){
super.onCreate(db)
已填充的Basynctask(实例).execute()
}
}
}
}
适配器类
类NoteAdapter:RecyclerView.Adapter(){
私有变量注释:List=ArrayList()
override-onCreateViewHolder(@NonNull-parent:ViewGroup,viewType:Int):NoteHolder{
val itemView=LayoutInflater.from(parent.context)。充气(R.layout.note_项,parent,false)
返回票据持有人(项目视图)
}
覆盖onBindViewHolder(@NonNull holder:NoteHolder,position:Int){
val currentNote=注释[位置]
holder.textViewTitle.text=currentNote.title
holder.textViewDescription.text=currentNote.description
holder.textViewPriority.text=currentNote.priority.toString()
}
重写getItemCount():Int{
返回注释。大小
}
趣味系列笔记(笔记:列表){
this.notes=注释
notifyDataSetChanged()
}
内部类记事本(itemView:View):RecyclerView.ViewHolder(itemView){
val textViewTitle:TextView=itemView.findViewById(R.id.text\u view\u title)
val textViewDescription:TextView=itemView.findViewById(R.id.text\u view\u description)
val textViewPriority:TextView=itemView.findViewById(R.id.text\u view\u priority)
}
}
视图模型
类NoteViewModel(应用程序:应用程序):AndroidViewModel(应用程序){
private var repository:notepository?=null
私有变量allNotes:LiveData?=null
趣味插页(注:注){
存储库?插入(注)
}
趣味更新(注:注){
存储库?更新(注)
}
乐趣删除(注:注){
存储库?.delete(注意)
}
fun deleteAllNotes(){
存储库?.deleteAllNotes()
}
有趣的getAllNotes():LiveData{
归还所有票据
}
}
存储库
private val noteDao: NoteDao? = null
private val allNotes: LiveData<List<Note>>? = null
fun NoteRepository(application: Application) {
val database = NoteDatabase.getInstance(application)
val noteDao = database.noteDao()
val allNotes = noteDao.allNotes
}
fun insert(note: com.example.vernaljobs.Note) {
if (noteDao != null) {
InsertNoteAsyncTask(noteDao).execute(note)
}
}
fun update(note: com.example.vernaljobs.Note) {
if (noteDao != null) {
UpdateNoteAsyncTask(noteDao).execute(note)
}
}
fun delete(note: com.example.vernaljobs.Note) {
if (noteDao != null) {
DeleteNoteAsyncTask(noteDao).execute(note)
}
}
fun deleteAllNotes() {
if (noteDao != null) {
DeleteAllNotesAsyncTask(noteDao).execute()
}
}
fun getAllNotes(): LiveData<List<Note>>? {
return allNotes
}
private class InsertNoteAsyncTask(private val noteDao: NoteDao) :
AsyncTask<com.example.vernaljobs.Note, Void, Void>() {
override fun doInBackground(vararg notes: com.example.vernaljobs.Note): Void? {
noteDao.insert(notes[0])
return null
}
}
private class UpdateNoteAsyncTask(private val noteDao: NoteDao) :
AsyncTask<com.example.vernaljobs.Note, Void, Void>() {
override fun doInBackground(vararg notes: com.example.vernaljobs.Note): Void? {
noteDao.update(notes[0])
return null
}
}
private class DeleteNoteAsyncTask(private val noteDao: NoteDao) :
AsyncTask<com.example.vernaljobs.Note, Void, Void>() {
override fun doInBackground(vararg notes: com.example.vernaljobs.Note): Void? {
noteDao.delete(notes[0])
return null
}
}
private class DeleteAllNotesAsyncTask(private val noteDao: NoteDao) :
AsyncTask<Void, Void, Void>() {
override fun doInBackground(vararg voids: Void): Void? {
noteDao.deleteAllNotes()
return null
}
}
private val noteDao:noteDao?=无效的
private val allNotes:LiveData?=无效的
fun NoteRepository(应用程序:应用程序){
val database=NoteDatabase.getInstance(应用程序)
val noteDao=database.noteDao()
val allNotes=noteDao.allNotes
}
有趣的插入(注意:com.example.vernaljobs.note){
if(noteDao!=null){
InsertNoteAsyncTask(noteDao).execute(note)
}
}
趣味更新(注意:com.example.vernaljobs.note){
if(noteDao!=null){
updateNodeAsynctask(noteDao).执行(note)
}
}
趣味删除(注意:com.example.vernaljobs.note){
if(noteDao!=null){
DeleteNoteAsyncTask(noteDao).执行(note)
}
}
fun deleteAllNotes(){
if(noteDao!=null){
DeleteAllNotesAsyncTask(noteDao).execute()
}
}
有趣的getAllNotes():LiveData?{
归还所有票据
}
私有类InsertNoteAsyncTask(私有val noteDao:noteDao):
AsyncTask(){
覆盖fun doInBackground(vararg notes:com.example.vernaljobs.Note):Void{
noteDao.insert(notes[0])
返回空
}
}
私有类updateNodeAsynctask(私有val noteDao:noteDao):
AsyncTask(){
覆盖fun doInBackground(vararg notes:com.example.vernaljobs.Note):Void{
noteDao.update(notes[0])
返回空
}
}
私有类DeleteNoteAsyncTask(私有val noteDao:noteDao):
AsyncTask(){
覆盖fun doInBackground(vararg notes:com.example.vernaljobs.Note):Void{
noteDao.delete(notes[0])
返回空
}
}
私有类DeleteAllNotesAsyncTask(私有val noteDao:noteDao):
AsyncTask(){
覆盖有趣的背景(vararg voids:Void):Void{
noteDao.deleteAllNotes()
返回空
}
}
}您能明确指出错误行吗,我们在这里看不到行号getAllNotes方法在哪里?ViewModel或该方法返回null。viewmodelok、updated、thx的Post代码用于尝试help@WoutStack例如,您的
ViewModel
具有getAllNotes()
方法,该方法返回LiveData
,该方法为null
,我看不到它的任何初始化/。
private var repository: NoteRepository?= null
private var allNotes: LiveData<List<Note>>? = null
fun insert(note: Note) {
repository?.insert(note)
}
fun update(note: Note) {
repository?.update(note)
}
fun delete(note: Note) {
repository?.delete(note)
}
fun deleteAllNotes() {
repository?.deleteAllNotes()
}
fun getAllNotes(): LiveData<List<Note>>? {
return allNotes
}
private val noteDao: NoteDao? = null
private val allNotes: LiveData<List<Note>>? = null
fun NoteRepository(application: Application) {
val database = NoteDatabase.getInstance(application)
val noteDao = database.noteDao()
val allNotes = noteDao.allNotes
}
fun insert(note: com.example.vernaljobs.Note) {
if (noteDao != null) {
InsertNoteAsyncTask(noteDao).execute(note)
}
}
fun update(note: com.example.vernaljobs.Note) {
if (noteDao != null) {
UpdateNoteAsyncTask(noteDao).execute(note)
}
}
fun delete(note: com.example.vernaljobs.Note) {
if (noteDao != null) {
DeleteNoteAsyncTask(noteDao).execute(note)
}
}
fun deleteAllNotes() {
if (noteDao != null) {
DeleteAllNotesAsyncTask(noteDao).execute()
}
}
fun getAllNotes(): LiveData<List<Note>>? {
return allNotes
}
private class InsertNoteAsyncTask(private val noteDao: NoteDao) :
AsyncTask<com.example.vernaljobs.Note, Void, Void>() {
override fun doInBackground(vararg notes: com.example.vernaljobs.Note): Void? {
noteDao.insert(notes[0])
return null
}
}
private class UpdateNoteAsyncTask(private val noteDao: NoteDao) :
AsyncTask<com.example.vernaljobs.Note, Void, Void>() {
override fun doInBackground(vararg notes: com.example.vernaljobs.Note): Void? {
noteDao.update(notes[0])
return null
}
}
private class DeleteNoteAsyncTask(private val noteDao: NoteDao) :
AsyncTask<com.example.vernaljobs.Note, Void, Void>() {
override fun doInBackground(vararg notes: com.example.vernaljobs.Note): Void? {
noteDao.delete(notes[0])
return null
}
}
private class DeleteAllNotesAsyncTask(private val noteDao: NoteDao) :
AsyncTask<Void, Void, Void>() {
override fun doInBackground(vararg voids: Void): Void? {
noteDao.deleteAllNotes()
return null
}
}