7

我在 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
4

2 回答 2

2

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

无论如何,问题是这个常量是staticinterface PeopleColumns. 静态的继承是 Java 拥有的,但 Scala 没有,而且即使在 Java 中,它也是不受欢迎的。

尝试导入PeopleColumns和使用PeopleColumns.NAME——或者,更好的是,使用新的、非弃用的做事方式。我不解释,因为我对 Android 开发一无所知。

于 2011-07-08T22:41:02.773 回答
0

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

于 2011-07-08T20:11:49.347 回答