2013-01-04 35 views
7

TypedArray (link) के लिए स्रोत कोड देख रहे हैं, मुझे लगता है कि इन दो विधियों के बीच क्या अंतर है यह पता नहीं लगा सकता है। getInt() मूल रूप से getInteger() जैसा ही है, लेकिन अंत में एक छोटे से जोड़े के साथ जो मुझे समझ में नहीं आता है। क्या कोई मुझे यह समझा सकता है?TypedArray.getInteger() और TypedArray.getInt() के बीच क्या अंतर है?

कारण मुझे अंतर जानने की आवश्यकता है कि मैं एक कस्टम वरीयता उपclass लागू कर रहा हूं, और डिफ़ॉल्ट मान प्राप्त करने के लिए मुझे onGetDefaultValue() ओवरराइड करने की आवश्यकता है, जो टाइपेडएरे से एक पूर्णांक प्राप्त करता है। उदाहरण:

@Override 
protected Object onGetDefaultValue(TypedArray a, int index) 
{ 
    return a.getInteger(index, DEFAULT_VALUE); 
} 

यहाँ मैं getInteger() उपयोग कर रहा हूँ, लेकिन अगर getInt() बेहतर है, तो मुझे लगता है कि प्रयोग करेंगे।

उत्तर

7

उनके पास बस "अन्य सभी विफल" मामले अलग-अलग हैं। वे दोनों int को वैध int और defValuenull के लिएलौटाते हैं। अंतर यह है कि वे उनमें से किसी के मामले को कैसे संभालते हैं।

link से:

/* 
* Copyright (C) 2008 The Android Open Source Project 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

TypedValue v = mValue; 
if (getValueAt(index, v)) { 
    Log.w(Resources.TAG, "Converting to int: " + v); 
    return XmlUtils.convertValueToInt(
     v.coerceToString(), defValue); 
} 
Log.w(Resources.TAG, "getInt of bad type: 0x" 
     + Integer.toHexString(type)); 
return defValue; 

इस अतिरिक्त आप की बात कर रहे है। ऐसा लगता है कि एक अज्ञात मान को स्ट्रिंग में एक पूर्णांक में परिवर्तित किया जा रहा है। यह उपयोगी हो सकता है यदि आपके पास "12" या कुछ समकक्ष मूल्य संग्रहीत थे।

अतिरिक्त getInteger अपवाद फेंकता है अगर यह null नहीं है और int नहीं है। इसके विपरीत यदि सभी अन्य getInt विफल रहता है तो डिफ़ॉल्ट मान देता है।

यह भी ध्यान रखें कि इस अजीब मामले में उनके व्यवहार इतना अलग है कि हर मामले में एक दूसरे से बेहतर कॉल करना गलत होगा। सबसे अच्छा समाधान वह है जो विफलता के लिए आपकी अपेक्षाओं से मेल खाता है।

+0

धन्यवाद। तो आप किस पर 'onGetDefaultValue() 'के लिए उपयोग करेंगे? मुझे लगता है कि मैं 'getInt() 'के साथ जाऊंगा क्योंकि यह" थोड़ा कठिन प्रयास करता है "और कम से कम कुछ वापस कर देगा। –

+1

हम्म, मैंने अभी दोनों गैर-इंट गैर-शून्य इनपुट के साथ परीक्षण किया है ('एंड्रॉइड: डिफ़ॉल्ट वैल्यू' एक्सएमएल विशेषता के लिए एक गिब्रिश स्ट्रिंग निर्दिष्ट) और ऐसा लगता है कि अगर दोनों अज्ञात मान का सामना करते हैं तो वे अपवाद फेंकते हैं ('getInt()' XMLUtils लाइन विफल होने पर अपवाद फेंकता है)। तो मुझे नहीं लगता कि यह वास्तव में मायने रखता है जिसका उपयोग 'onGetDefaultValue() 'में किया जाता है ... –