何时使用getString()

时间:2013-12-12 08:56:39

标签: android string getstring

我想知道getString()。 我可以看到做getString(R.string.some_text)有效。 getResources().getString(R.string.connection_error)也有效。 所以我的问题是为什么我们应该使用getString或什么时候? 谢谢!

5 个答案:

答案 0 :(得分:5)

这个问题很容易被误解。

如果您处于有效的上下文(如活动),则没有区别,因为上下文具有对资源的引用,因此它可以直接解析getString(int);,返回一个String。

添加更多信息,让您高枕无忧。

如果您可以直接使用getString,请继续执行。现在有时您可能需要使用getResources(),因为它包含许多辅助方法。

这是getResources.getString()的Android源代码:

/**
     * Return the string value associated with a particular resource ID.  It
     * will be stripped of any styled text information.
     * {@more}
     *
     * @param id The desired resource identifier, as generated by the aapt
     *           tool. This integer encodes the package, type, and resource
     *           entry. The value 0 is an invalid identifier.
     *
     * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
     *
     * @return String The string data associated with the resource,
     * stripped of styled text information.
     */
    public String getString(int id) throws NotFoundException {
        CharSequence res = getText(id);
        if (res != null) {
            return res.toString();
        }
        throw new NotFoundException("String resource ID #0x"
                                    + Integer.toHexString(id));
    }

整洁吧? :)

事实是,Resources对象不仅仅是“获取字符串”,你可以看看here

现在与getString()的活动版本进行比较:

  

从应用程序包的默认值返回本地化字符串   字符串表。

总而言之,除了Resources对象be stripped of any styled text information.以及Resources对象可以更多之外,最终结果是相同的。 Activity版本是一个方便的快捷方式:)

答案 1 :(得分:2)

方法相同。从逻辑上讲,没有区别。你可以假设它确实如此:

public final String getString(int resId) {
 return getResources().getString(resId);
 }

我所知道的唯一区别是, getResources()可能需要将其他应用资源作为对象获取。 getString()将访问您自己的资源。

答案 2 :(得分:1)

如果将它用于TextView,则有两种方法setText()。一个接受(CharSequence字符串),另一个接受(int resId)。这就是你的两种变体都有效的原因。

通常我建议在strings.xml文件中定义所有字符串,并通过代码中的getResources()。getString(int resId)获取它们。采用这种方法,您将能够轻松本地化您的应用程序。您可以阅读有关应用资源here

的更多信息

答案 3 :(得分:1)

非常基本的区别。

R.string.some_text = return ID integer, identifying string resource in your space
getResources().getString(R.string.connection_error) = Will return you actualy string associated with ID `R.string.connection_error`

它们都可以在Android系统中使用,其中许多小部件可以直接获取资源的id或值。实际上返回的值没有区别只有区别是Context,你可以使用活动上下文,因此调用getString直接路由到这个上下文的资源,而来自上下文不是的类从适配器可以说,你需要首先访问Context,然后是与上下文关联的资源,最后是String,这样你就可以编写getContext().getResources().getString(R.string.connection_error)

我希望它可以解除你的困惑。

答案 4 :(得分:0)