如何检查Android中是否存在资源

是否有内置的方式来检查是否存在资源,或者我正在做下面的事情:

boolean result; int test = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); result = test != 0; 

根据javadoc你不需要try catch: http : //developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String, %20java.lang.String 29%

如果getIdentifier()返回零,则意味着不存在这样的资源。
另外0 – 是一个非法的资源ID。

所以你的结果布尔variables相当于(test != 0)

无论如何,你的try / finally是坏的,因为它所做的就是把结果variables设置为false,即使从try: mContext.get.....的主体抛出了exception,然后它只是在抛出之后“抛出”exception最后的条款。 我想这不是你想要做的例外情况。

你的代码中的try / catch块是完全无用的(和错误的),因为getResouces()getIdentifier(...)不会抛出exception。

所以, getIdentifier(...)将已经返回你所有你需要的。 事实上,如果它将返回0,那么你正在寻找的资源不存在。 否则,它将返回关联的资源标识符(实际上, “0不是有效的资源ID” )。

这里是正确的代码:

 int checkExistence = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); if ( checkExistence != 0 ) { // the resouce exists... result = true; } else { // checkExistence == 0 // the resouce does NOT exist!! result = false; } 

如果有人想知道, "my_resource_name"

 int checkExistence = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); 

实际上是

 String resourceName = String.valueOf(R.drawable.my_resource_name); int checkExistence = mContext.getResources().getIdentifier(resourceName , "drawable", mContext.getPackageName());