如何检查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());