android.content.Context.getApplicationContext()' 在空对象引用上
android.content.Context.getApplicationContext()' on a null object reference
我有这个任务数据库
@Database(
entities = [
Todo::class
],
version = 1
)
abstract class TaskDataBase : RoomDatabase() {
abstract val taskDao: TaskDao
companion object {
@Volatile
private var INSTANCE: TaskDataBase? = null
fun getInstance(context: Context): TaskDataBase {
synchronized(this){
return INSTANCE ?: Room.databaseBuilder(
context.applicationContext,
TaskDataBase::class.java,
"task_db"
).build().also {
INSTANCE = it
}
}
}
}
}
而mainActivity是这样的
class MainActivity : AppCompatActivity(), TodoAdapter.OnItemLongClickListener {
private var todoList = mutableListOf(
Todo("First Todo item", false),
Todo("Second Todo item", true),
Todo("Third Todo item", false),
Todo("Forth Todo item", true),
Todo("Fifth Todo item", false),
Todo("Sixth Todo item", true),
Todo("Seventh Todo item", false)
)
private val adapter = TodoAdapter(todoList, this)
private val dao:TaskDao = TaskDataBase.getInstance(this).taskDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
rvTodos.adapter = adapter
rvTodos.layoutManager = LinearLayoutManager(this)
当我 运行 应用程序时出现此错误
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
它告诉我上下文中有错误。
我不知道该怎么办。我尝试过改变,但效果不佳。
您在上下文存在之前将上下文传递给属性。
您可以在 onCreate
完成后分配上下文。
您可以声明这些属性。然后就可以设置setContentView
.
后面的值了
private var dao:TaskDao;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
dao = TaskDataBase.getInstance(this).taskDao
}
我有这个任务数据库
@Database(
entities = [
Todo::class
],
version = 1
)
abstract class TaskDataBase : RoomDatabase() {
abstract val taskDao: TaskDao
companion object {
@Volatile
private var INSTANCE: TaskDataBase? = null
fun getInstance(context: Context): TaskDataBase {
synchronized(this){
return INSTANCE ?: Room.databaseBuilder(
context.applicationContext,
TaskDataBase::class.java,
"task_db"
).build().also {
INSTANCE = it
}
}
}
}
}
而mainActivity是这样的
class MainActivity : AppCompatActivity(), TodoAdapter.OnItemLongClickListener {
private var todoList = mutableListOf(
Todo("First Todo item", false),
Todo("Second Todo item", true),
Todo("Third Todo item", false),
Todo("Forth Todo item", true),
Todo("Fifth Todo item", false),
Todo("Sixth Todo item", true),
Todo("Seventh Todo item", false)
)
private val adapter = TodoAdapter(todoList, this)
private val dao:TaskDao = TaskDataBase.getInstance(this).taskDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
rvTodos.adapter = adapter
rvTodos.layoutManager = LinearLayoutManager(this)
当我 运行 应用程序时出现此错误
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
它告诉我上下文中有错误。 我不知道该怎么办。我尝试过改变,但效果不佳。
您在上下文存在之前将上下文传递给属性。
您可以在 onCreate
完成后分配上下文。
您可以声明这些属性。然后就可以设置setContentView
.
private var dao:TaskDao;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
dao = TaskDataBase.getInstance(this).taskDao
}