在Android中使用Scala中的Java常量

exi*_*ine 7 android scala scala-java-interop

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

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

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

val projection = Array(
  People.NAME,
  People.NUMBER
)
Run Code Online (Sandbox Code Playgroud)

但是,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
Run Code Online (Sandbox Code Playgroud)

实际上它这个对象的成员,它在接口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
Run Code Online (Sandbox Code Playgroud)

Dan*_*ral 2

根据参考,此上下文已被弃用。新方法是ContactsContract,您应该使用它。

无论如何,问题是这个常数是static定义在interface PeopleColumns. 静态继承是 Java 具有的功能,但 Scala 没有,甚至在 Java 中也令人不悦。

尝试导入PeopleColumns并使用PeopleColumns.NAME- 或者,更好的是,使用新的、未弃用的做事方式。我不解释,因为我不了解 Android 开发。