2011-07-08 8 views
7

मुझे एंड्रॉइड पर स्कैला में विकास के साथ एक अजीब समस्या है। मैं एसबीटी एंड्रॉयड प्लगइन का उपयोग कर रहा है और अभी मैं सामग्री प्रदाताओं काम कर पाने के कोशिश कर रहा हूँ, लेकिन ...एंड्रॉइड में स्कैला से जावा स्थिरांक का उपयोग

मैं स्तंभों की सरणी प्राप्त करने की आवश्यकता है, और मैं यह वास्तव में ट्यूटोरियल यहाँ की तरह कर रहा हूँ: http://developer.android.com/guide/topics/providers/content-providers.html

बस जावा के सरणी कोड को स्कैला के साथ बदल दिया। यह इस तरह दिखता है:

val projection = Array(
    People.NAME, 
    People.NUMBER 
) 

लेकिन तब, स्केला संकलक रिटर्न त्रुटि

[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 में परिभाषित किया गया है (जो लोगों द्वारा लागू किया जाता है)। मैंने पीपुल्स कॉलम से सीधे किसी भी सफलता (एक ही त्रुटि) के बिना इसे प्राप्त करने का प्रयास किया है। स्कैला में जावा से स्थिरांक कुछ अलग है या मैंने अभी एक बेवकूफ गलती की है?

अद्यतन:

अगला समस्या। ContactContract का उपयोग करते समय। संपर्क त्रुटि वही रहता है, और जब कोई अन्य विधि आज़माती है तो मैं संपर्कों तक पहुंच नहीं पा रहा हूं। संपर्क सीधे कॉलम क्योंकि यह सुरक्षित इंटरफ़ेस है।

[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

अभी के लिए, इसके लिए सबसे अच्छा संभव समाधान जावा में कक्षा के रूप में सभी क्वेरी कोड लिख रहा है, और फिर इसे कॉल कर रहा है। इसमें भाषा मिश्रण शामिल है, जटिलता बढ़ जाती है और यह ऐसा कुछ है जिसे मैं पसंद नहीं करता हूं। – exine

उत्तर

2

इस संदर्भ को संदर्भ के अनुसार बहिष्कृत किया गया है। नया तरीका ContactsContract है, और आपको इसका उपयोग करना चाहिए।

वैसे भी, समस्या यह है कि यह स्थिर staticinterface PeopleColumns पर परिभाषित है। स्टेटिक्स का विरासत जावा के पास कुछ है लेकिन स्कैला नहीं करता है, और यह जावा में भी डूब गया है।

PeopleColumns आयात करने का प्रयास करें और इसके बजाय PeopleColumns.NAME का उपयोग करके - या बेहतर, अभी तक, नए, गैर-बहिष्कृत, चीजों को करने का तरीका उपयोग करें। जो मैं समझ नहीं पा रहा हूं क्योंकि मुझे एंड्रॉइड विकास का कोई ज्ञान नहीं है।

+0

'[त्रुटि] /home/exine/proj/hello-world/src/main/scala/Activity.scala:13 – exine

+0

नया एपीआई - ऊपर अद्यतन पर देखें। कोई सुराग? – exine

+0

@ एक्सिन 'NUMBER'' फ़ोन कॉलम 'से आता है। अपडेट के लिए ... उस बिंदु पर, आप जावा में कुछ पाने के लिए सबसे अच्छा लिखेंगे। या तो उन इंटरफेस से निपटने के दौरान व्यवसाय तर्क, या उनके चारों ओर कुछ स्काला-अनुकूल जावा रैपर। दोनों खराब विकल्प हैं, लेकिन हम बहुत अच्छे विकल्पों से बाहर निकलते प्रतीत होते हैं। –

0

मुझे लगता है कि आप android.provider.Contacts.PeopleColumns._ साथ स्थैतिक चर आयात करने के लिए इससे पहले कि आप उन तक पहुँच सकते होगा।

+0

अभी भी मूल्य नहीं मिला है। = सरणी ( नाम, संख्या ) – exine

+0

आप वैल प्रक्षेपण के रूप में इसे सीधे कॉल करनी होगी: मान NUMBER ऑब्जेक्ट का सदस्य नहीं है android.provider.Contacts.PopleopleColumns [त्रुटि] PeopleColumns.NUMBER [त्रुटि]^ [त्रुटि] एक त्रुटि मिली 'मैं नई एपीआई के साथ प्रयास करूंगा। – logcat