查看TypedArray(link)的源代码,我似乎无法弄清楚这两种方法之间的区别。 getInt()getInteger()基本相同,但最后增加了一点我不理解的内容。有人可以向我解释吗?

我需要知道差异的原因是我正在实现一个自定义的Preference子类,并且要获取默认值,我需要重写onGetDefaultValue(),后者从TypedArray中获取一个整数。例子:

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

在这里,我使用getInteger(),但是如果getInt()更好,那么我将使用它。

最佳答案

他们只是有不同的“其他所有失败”案例。它们都返回有效的intintdefValuenull。不同之处在于他们如何处理这两种情况。

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返回默认值。

还要注意,在这种奇怪的情况下,它们的行为是足够不同的,以致在每种情况下都称呼一个优于另一个是不正确的。最好的解决方案是符合您对失败的期望的解决方案。

关于android - TypedArray.getInteger()和TypedArray.getInt()有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14163682/

10-09 01:46