7

Android の Scala での開発に奇妙な問題があります。私は 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 (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であり、それを使用する必要があります。

とにかく、問題は、この定数が でstatic定義されていることinterface PeopleColumnsです。static の継承は Java にはありますが、Scala にはありません。Java でも嫌われています。

代わりにインポートPeopleColumnsして使用してみてくださいPeopleColumns.NAME。または、より良い方法として、非推奨ではない新しい方法を使用してください。Android開発の知識がないため、説明しません。

于 2011-07-08T22:41:02.773 に答える
0

android.provider.Contacts.PeopleColumns._それらにアクセスする前に、静的変数をインポートする必要があると思います。

于 2011-07-08T20:11:49.347 に答える