Android/Kotlin: 错误:"Expecting a top level declaration > Task :app:buildInfoGeneratorDebug"。

21

我正在尝试编写一个用于管理SQLite数据库的类,但是我遇到了错误信息“Expecting a top level declaration > Task :app:buildInfoGeneratorDebug”。

   package com.xexxxwxxxxs.GMP

    import android.database.sqlite.SQLiteDatabase
    import android.database.sqlite.SQLiteOpenHelper
    import android.content.Context
    import android.content.ContentValues

    class DBHandler(context: Context, name: String?, factory: SQLiteDatabase.CursorFactory?, version: Int) : SQLiteOpenHelper(context, DATABASE_NAME, factory, DATABASE_VERSION)
    {
        override fun onCreate(db: SQLiteDatabase)
        {

        }

        override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int)
        {

        }

        companion object
        {
            private val DATABASE_VERSION = 1
            private val DATABASE_NAME = "GMP.db"
        }
    } 

你有任何想法吗?

先行致谢。

5个回答

77

我只是删除了最后一个花括号,然后重新写了一遍。它就可以工作了 :)


10
你刚刚让我崩溃了 :D 它有效了。不可思议……似乎末尾有一个看不见的字符。 - ΩlostA
6
在我的情况下有一个额外的闭括号。 - pallav bohara
5
就在我认为编程中没有黑魔法的时候,呵呵。谢谢。 - Syed Arsalan Kazmi
1
我发现相同的错误是因为我在函数名称中使用了“-”破折号... - Zhou Haibo

5
我也遇到了相同的问题,你只需要删除自动生成的末尾多余的花括号,就可以使它正常工作。

我有一个稍微高级一点的版本:我不得不删除最后三个括号,然后再把它们放回去。 - Richard Kirk

1
我最近更改了我的包名(例如,com.example.myappname),发现第1行的MainActivity.kt包名没有更新为新名称 - 这导致了这个错误。

0

如果您在类声明之外定义了任何对象,则可能会出现此错误。

例如:
class someActivity extands something{ } private someMethod(){}

要解决这个问题,只需将其移动到内部即可。

`class someActivity extands something{

private someMethod(){} }`


-1
如果你和我一样在使用VSCode进行编程,那么你应该删除文件末尾对main()的调用。例如:
fun main(){
println("This will fail")
}
main()

对于上述问题,我们将会得到以下错误:

your_file.kt:50:6: 错误:期望一个顶层声明 main()

移除对 main() 的调用即可解决该问题。


你好,能否解释一下为什么我们应该把函数调用(例如 println())放到 main 函数中? - Archsx
只有在 VS Code 中才能自动运行它。 - NelsonGon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接