尽管文件存在,但Drawable.createFromPath(filePath)返回null

时间:2013-10-02 05:23:37

标签: android android-drawable

我有这段代码:

String filePath = getActivity().getFileStreamPath("into11.png").getAbsolutePath();
        if(Drawable.createFromPath(filePath)!=null){
        img.setImageDrawable(Drawable.createFromPath(filePath));
        }
        else{
        Log.d("nulllllllllllllllllllllllllllllllll","yessssssssssssssssssssssssssss");  
        }

文件路径正在获取图像“data / data /.../intro11.png”的正确路径,但Drawable.createFromPath(filePath)为空,这是什么原因?

4 个答案:

答案 0 :(得分:0)

使用此代码:

File drawableFile = new     File(getApplicationContext().getFilesDir().getAbsolutePath()+"/into11.png");

    if(Drawable.createFromPath(drawableFile.getAbsolutePath())!=null){
    img.setImageDrawable(Drawable.createFromPath(drawableFile.getAbsolutePath()));
    }
    else{
    Log.d("nulllllllllllllllllllllllllllllllll","yessssssssssssssssssssssssssss");  
    }


我希望这有助于解决您的问题。

答案 1 :(得分:0)

用户moh.suhkni在原始问题中发表评论几乎为我完全解决了这个问题。

他发布了:

Uri uri = Uri.fromFile(filePath);
img.setImageURI(uri);

我最终需要的解决方案是:

final Uri uri = Uri.parse(url);
final String path = uri.getPath();
final Drawable drawable = Drawable.createFromPath(path);
img.setImageDrawable(drawable);

由于某种原因,这不起作用:

final Drawable drawable = Drawable.createFromPath(url);
// drawable ended up being null
img.setImageDrawable(drawable);

Android的Drawable.createFromPath()方法不能像我一样喜欢以file://开头的路径。使用Uri.parse()为我解决了这个问题。

希望这可以提供帮助!

答案 2 :(得分:0)

我有同样的问题,对我来说,我试图从我之前保存到内部存储的文件中创建一个Drawable。我的问题最终是我的文件被错误保存,所以它没有创建drawable。它还在调试控制台中引发了错误。

我希望这有助于某人。

这是我保存的代码(注释掉的是我遗漏的内容):

URL url = new URL(remoteFile);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
FileOutputStream fos = mainActivity.openFileOutput(filename,            
Context.MODE_PRIVATE);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
// bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
byte[] byteArray = outStream.toByteArray();
fos.write(byteArray);
fos.close();

我仍然想知道只是逐字节保存文件,所以我不必打开图像并重新压缩它。

答案 3 :(得分:-1)

Drawable d = getResources().getDrawable(R.drawable.smiley);

在图片视图中显示

ImageView i = new ImageView(this);
i.setImageResource(R.drawable.smiley);

或在您的xml文件中

<ImageView   
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@drawable/smiley"/>