Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android mvvm模型中带有recyclerview的空白页_Android_Kotlin_Android Activity_Mvvm_Android Recyclerview - Fatal编程技术网

Android mvvm模型中带有recyclerview的空白页

Android 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

我是个新手,遇到了一个问题,我得到了一个错误,而不是一个recyclerview

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