2014-07-12 12 views
27

एंड्रॉइड स्टूडियो बीटा (0.8) में निफ्टी नई सुविधा है जहां यह जांचता है कि कुछ int पैरामीटर मनमाने ढंग से पूर्णांक नहीं हैं, बल्कि कुछ गुण हैं।एंड्रॉइड स्टूडियो का "अपेक्षित संसाधन प्रकार" चेक?

उदाहरण के लिए, की तरह कुछ बुला:

setContentView(R.id.textView1); 

सही ढंग से रिपोर्ट करेंगे कि R.id.textView1 एक लेआउट आईडी नहीं है (संदेश "प्रकार लेआउट की उम्मीद संसाधन" है)। इस मिर्च के आसपास के अन्य मामले हैं।

समझ में आता है, जैसे ही आप मिश्रण में अपनी खुद की विधियां जोड़ते हैं, यह सुरक्षा खो जाती है, उदा।

private void mySetContentView(int resourceId) { 
    setContentView(resourceId); 
} 

मैं तो किसी भी मनमाने ढंग से पूर्णांक के साथ mySetContentView() कॉल कर सकते हैं और यह शिकायत नहीं होंगे।

तो, मैं दो (संबंधित) सवाल:

  1. यह कैसे हासिल की है - विशेष चेकों फाहा में "बेक्ड" कर रहे हैं?
  2. क्या mySetContentView() विधि को एनोटेट करने का कोई तरीका है ताकि यह किसी अमान्य मान के साथ कॉल करते समय संसाधन प्रकार त्रुटि की रिपोर्ट भी करेगा?
+4

मैं बहुत यकीन है कि यह एक एनोटेशन है हूँ - मुझे लगता है कि वे कम से डेवलपर उपकरण प्रस्तुति में इस कवर हो सकता है Google I | ओ। – CommonsWare

+1

@ कॉमन्सवेयर आप सही हैं! क्या आप इसका जवाब देना चाहते हैं, या मैं इसे स्वयं करूँगा? – matiash

+1

चूंकि मुझे एनोटेशन याद नहीं है, तो आपने इसका बेहतर जवाब दिया था। :-) – CommonsWare

उत्तर

34

(सिर के लिए @ कॉमन्सवेयर के लिए धन्यवाद)।

आपके कोड में इन चेक का समर्थन करने के लिए जावा एनोटेशन हैं। वे सभी android.support.annotations पैकेज में पाया जा सकता है:

  • IdRes
  • DrawableRes
  • LayoutRes
  • StringRes
  • & ग

इस मामले में, उदाहरण के लिए, मैं इस्तेमाल कर सकते हैं :

private void mySetContentView(@LayoutRes int resourceId) { 
    setContentView(resourceId); 
} 

और एंड्रॉइड स्टूडियो जांच करेगा कि प्रदत्त संसाधन आईडी वास्तव में एक लेआउट के लिए है।

इसके अलावा, इन एनोटेशन को निर्यात किया जाता है, इसलिए लाइब्रेरी को डिज़ाइन करते समय वे विशेष रूप से उपयोगी हो सकते हैं।

सूत्रों का कहना है:

+0

धन्यवाद! वही निकास ... इनपुटस्ट्रीम = getResources()। OpenRawResource (getResourceID (R.drawable.greenbal)); .... निजी int getResourceID (@DrawableRes int resid) { वापसी resid; } – oshliaer

20

यह सब एनोटेशन हैं:

@AnimatorRes 
@AnimRes 
@AnyRes 
@ArrayRes 
@AttrRes 
@BoolRes 
@ColorRes 
@DimenRes 
@DrawableRes 
@FractionRes 
@IdRes 
@IntDef 
@IntegerRes 
@InterpolatorRes 
@LayoutRes 
@MenuRes 
@NonNull 
@Nullable 
@PluralsRes 
@RawRes 
@StringDef 
@StringRes 
@StyleableRes 
@StyleRes 
@XmlRes 
0

सभी एनोटेशन, कि आप android.support.annotation आप कर सकते हैं के साथ उपयोग कर सकते हैं here खोजें।

और technical doc एनोटेशन का समर्थन करने के बारे में।

8

इस जवाब का प्रयास करें: अपने काम कर रहे ... अपने build.gradle इस कोड डाल

android { 
lintOptions { 
    disable "ResourceType" 
    } 
} 
+0

एक आकर्षण की तरह काम करता है) –

+1

मुझे लगता है कि सवाल सिर्फ विपरीत था: वह उन जांचों को देखना चाहता है भले ही मध्यवर्ती कार्यों का उपयोग किया जाए। सावधान रहें: चेक अक्षम करना आमतौर पर एक बुरा विचार है। एंड्रॉइड डेवलपर्स आमतौर पर हमारे से ज्यादा स्मार्ट होते हैं;) –

संबंधित मुद्दे