在Android中使用Scala中的Java常量

时间:2011-07-08 18:36:43

标签: 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
)

但是,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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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

相关问题