在Android中使用Scala中的Java常量

我在Android上使用Scala进行开发时遇到了一个奇怪的问题。 我正在使用sbt android插件,现在我正在努力让内容提供商工作,但……

我需要获得一系列列,我在这里完全像在教程中那样: http : //developer.android.com/guide/topics/providers/content-providers.html

刚用Scala替换了Java的数组代码。 它看起来像这样:

val projection = Array( People.NAME, People.NUMBER ) 

但是,scala编译器返回错误

 [error] /home/exine/proj/hello-world/src/main/scala/Activity.scala:12: value NAME is not a member of object android.provider.Contacts.People [error] People.NAME, [error] ^ [error] one error found 

实际上它这个对象的成员,它在接口android.provider.Contacts.PeopleColumns(由People实现)中定义。 我也试过直接从PeopleColumns获取它而没有任何成功(同样的错误)。 在Scala中从Java中获取常量有些不同,或者我在某处犯了一个愚蠢的错误?

更新:

下一个问题。 使用ContactsContract.Contacts错误时保持不变,并且在尝试其他方法时,我无法直接访问ContactsContract.ContactsColumns,因为它是受保护的接口。

 [error] /home/exine/proj/hello-world/src/main/scala/Activity.scala:13: object ContactsColumns cannot be accessed in object android.provider.ContactsContract [error] ContactsColumns.LOOKUP_KEY, [error] ^ [error] one error found 

根据参考,不推荐使用此上下文。 新方法是ContactsContract ,您应该使用它。

无论如何,问题是这个常量是在interface PeopleColumns上定义的static 。 静态的inheritance是Java所拥有的,但Scala没有,甚至在Java中它也不受欢迎。

尝试导入PeopleColumns并使用PeopleColumns.NAME – 或者更好的是,使用新的,不推荐的做事方式。 我没有解释,因为我不了解Android开发。

我认为您必须先使用android.provider.Contacts.PeopleColumns._导入静态variables,然后才能访问它们。