Использование Java-констант из Scala в Android - PullRequest
7 голосов
/ 08 июля 2011

У меня странная проблема с разработкой в ​​Scala на Android.Я использую плагин sbt android и сейчас пытаюсь заставить контент-провайдеров работать, но ...

Мне нужно получить массив столбцов, и я делаю это в точности как в уроке здесь:http://developer.android.com/guide/topics/providers/content-providers.html

Просто заменил код массива Java на Scala.Это выглядит так:

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 (который реализуется людьми).Я пытался получить его напрямую из PeopleColumns тоже безуспешно (та же ошибка).Получают ли константы из Java в Scala несколько иное или я просто где-то допустил глупую ошибку?

ОБНОВЛЕНИЕ:

Следующая проблема.При использовании 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 ]

2 голосов
/ 09 июля 2011

Этот контекст устарел согласно ссылке. Новый способ - ContactsContract, и вы должны его использовать.

В любом случае, проблема в том, что эта константа static определена в interface PeopleColumns. Унаследование статики - это то, что есть в Java, но в Scala нет, и оно не одобряется даже в Java.

Попробуйте импортировать PeopleColumns и использовать PeopleColumns.NAME вместо этого - или, что еще лучше, используйте новый, не осуждаемый способ ведения дел. Что я не объясняю, потому что не знаю, как разрабатывать Android.

0 голосов
/ 09 июля 2011

Я думаю, вам придется импортировать статические переменные с android.provider.Contacts.PeopleColumns._, прежде чем вы сможете получить к ним доступ.

...