我在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
答案 0 :(得分:2)
根据参考资料不推荐使用此上下文。新方法是ContactsContract
,您应该使用它。
无论如何,问题是此常量是static
上定义的interface PeopleColumns
。静态的继承是Java所拥有的,但Scala却没有,甚至在Java中它也不受欢迎。
尝试导入PeopleColumns
并使用PeopleColumns.NAME
代替 - 或者更好的是,使用新的,不推荐的做事方式。我没有解释,因为我不了解Android开发。
答案 1 :(得分:0)
我认为您必须先使用android.provider.Contacts.PeopleColumns._
导入静态变量,然后才能访问它们。