Android Studio让我转圈!使用以下代码
fun fetchAllPOIs(): Cursor? {
if (myDbHelper.myDataBase != null)
return myDbHelper.myDataBase!!.query(
"POIs", arrayOf(
"Name", "Type",
"Latitude", "Longitude", "_id"
), null, null, null, null, null
)
}
Android Studio在结尾处标记一个错误,说
具有块主体的函数中需要的“返回”表达式。
建议的快速修复方法是
删除显式指定的封闭函数“ DBAdapter.fetchAllPOIs”的返回类型
如果我接受快速修复,则代码看起来像
fun fetchAllPOIs() {
if (myDbHelper.myDataBase != null)
return myDbHelper.myDataBase!!.query(
"POIs", arrayOf(
"Name", "Type",
"Latitude", "Longitude", "_id"
), null, null, null, null, null
)
}
,大多数功能都有下划线。建议的快速修复为
将封闭函数的返回类型更改为“游标?”
当我接受这一点时,我回到第一个方框!
我要如何摆脱呢?
答案 0 :(得分:1)
让我们回到原始来源:
fun fetchAllPOIs(): Cursor? {
if (myDbHelper.myDataBase != null)
return myDbHelper.myDataBase!!.query(
"POIs", arrayOf(
"Name", "Type",
"Latitude", "Longitude", "_id"
), null, null, null, null, null
)
}
如果myDbHelper.myDataBase == null
应该返回什么?编译器不知道,因为您没有告诉它要返回什么。
假设您要返回null
。
您有三种可能的解决方案。 Java风格的解决方案是:
fun fetchAllPOIs(): Cursor? {
if (myDbHelper.myDataBase != null) {
return myDbHelper.myDataBase!!.query(
"POIs", arrayOf(
"Name", "Type",
"Latitude", "Longitude", "_id"
), null, null, null, null, null)
} else {
return null
}
}
您还有更多的Kotlin-y“将收益从if / else中剔除”的方法:
fun fetchAllPOIs(): Cursor? {
return if (myDbHelper.myDataBase != null) {
myDbHelper.myDataBase!!.query(
"POIs", arrayOf(
"Name", "Type",
"Latitude", "Longitude", "_id"
), null, null, null, null, null)
} else {
null
}
}
您将拥有非常安全的Kotlin-y呼叫方式:
fun fetchAllPOIs(): Cursor? {
return myDbHelper.myDataBase?.query(
"POIs", arrayOf(
"Name", "Type",
"Latitude", "Longitude", "_id"
), null, null, null, null, null)
}
?.
是“安全呼叫”运算符。如果myDbHelper.myDataBase
不是null
,它将调用query()
。如果myDbHelper.myDataBase
是 null
,则?.
跳过query()
调用并求值为null
。
如果您打算返回null
以外的其他内容,那么其中一些内容将需要修改。