2011-04-19 18 views
1


我是android新手,不太了解它。我已经将图像导入到我的项目中,并且当我尝试使用该文件存在或不存在时检查它。我怎样才能得到我上传的图片的路径在android中的assests或drawable?

这是我使用的代码..

existingFileName="res/drawable-ldpi/login.png"; 
File f= new File(existingFileName); 
     // Log.d("Image path",); 
     if(f.exists()) 
     { 
      Log.d("EXISTS", "====File Exists==="); 
     } 

尽管如此它显示我没有图像存在。

感谢提前的帮助, 奥比

回答

4

如果您存储在图像“RES /绘制”文件夹,你可以这样做:

Drawable drawable = getResources().getDrawable(R.drawable.name) 

http://developer.android.com/reference/android/content/res/Resources.html#getDrawable

为您存储图像中的资产文件夹的情况下,你需要使用getAssets()http://developer.android.com/reference/android/content/Context.html#getAssets())

你可以做这样的事情:

InputStream is = getAssets().open(imageName); 
BufferedInputStream buf = new BufferedInputStream(is); 
Bitmap bitmap = BitmapFactory.decodeStream(buf); 

记住,对于这两种情况下,你需要有一个Context(即Activity

8

如果你把你的图像绘制文件夹,我不认为你可以这样访问它们。试试这个

Drawable image= getResources().getDrawable(R.drawable.<id>); 

id将是你的文件名。

+0

我可以通过这种方式获取图像路径吗? – insomiac 2011-04-20 18:01:59

+0

我得到这个错误..“不能从类型ContextWrapper的非静态方法getResources()静态引用” – insomiac 2011-04-20 18:30:56

+0

尝试获取使用该getResources()方法的上下文。像这样的东西mContext.getResources()。getDrawable(R.drawable。) – yogsma 2011-04-28 17:40:27

2

no need to check你读它之前的资产文件的存在。 AssetManager takes care of it。如果文件丢失,则会引发异常。你的编码习惯应该总是把这部分代码放在try catch中并分解逻辑。额外的代码是不需要的。如果你尝试打开一个不存在的文件,你会得到一个异常。

虽然,如果你仍然想做那个手动工作,请尝试下面的代码。

AssetManager mg = getResources().getAssets(); 

try { 

    //do all considering file exists 
    mg.open(pathInAssets); 
} catch (IOException ex) { 
    //do all in case file is missing 
} 

如果您的文件位于资产/文件夹/ file.ext,然后pathInAssets"folder/file.ext"

Check for file existence in androids assets folder?

How to check Android Asset resource?

1

通常,如果您使用RES /绘制,您的ressource标识符被编译到R.java文件中。所以如果你使用的是标识符,你可以确定文件存在,否则你不能编译你的项目。

然而,如果你想以后交换R.java,真正需要列出在res /绘制的ressources,您可以用Java反射做到这一点,检查R类是这样的:

Class<?> c=R.drawable.class; 
    Field[] fs=c.getFields(); 
    for(Field f: fs) 
     Log.v("test", f.getName()); 

你会然后获取资源列表,而不需要文件扩展名。然后用int id=f.getInt(null);读取每个资源的资源标识符(整数)。

1

如果你得到这个错误。“不能从类型ContextWrapper做出static参考non-static方法getResources()

尝试Drawable image=Classname.this.getResources().getDrawable(R.drawable.<id>); 这里Classname.this意味着ClassContext /应用程序上下文。

相关问题