Java Android从url保存图像,然后检索它

Java Android从url保存图像,然后检索它,java,android,Java,Android,我需要从Web服务提供的Url保存一个图像,然后在某些活动中,我需要检索和使用该图像 因为我已经在使用毕加索来下载和缓存图像,所以我使用了以下方法: public void downloadFile(String url) { Picasso.with(AnimationActivity.this).load( url).into(new Target() { @Override public void onBitmapLoaded

我需要从Web服务提供的Url保存一个图像,然后在某些活动中,我需要检索和使用该图像

因为我已经在使用毕加索来下载和缓存图像,所以我使用了以下方法:

public void downloadFile(String url) {
        Picasso.with(AnimationActivity.this).load( url).into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                try {
                    String root = Environment.getExternalStorageDirectory().toString();
                    File myDir = new File(root + "/bBackground");
                    if (!myDir.exists()) {
                        myDir.mkdirs();
                    }
                    String name = "bBg.jpg";
                    myDir = new File(myDir, name);
                    FileOutputStream out = new FileOutputStream(myDir);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
                    out.flush();
                    out.close();                        
                    } catch(Exception e){}
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {}
            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {}
        });

    }   
然后为了检索图像,我尝试使用以下代码:

String bgImagePath = Environment.getExternalStorageDirectory() + "/bBackground/bBg.jpg";
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap mustOpen = BitmapFactory.decodeFile(bgImagePath, options);

        ImageView imageView = (ImageView) findViewById(R.id.bBgImage);
        imageView.setImageBitmap(mustOpen);
但检索图像时出现错误:

E/BitmapFactory(30761): Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/bBackground/bBg.jpg: open failed: ENOENT (No such file or directory)

我做错了什么?这是与保存或检索方法有关的问题吗?

尝试此代码此问题与毕加索目标有关

private Target loadtarget;

    public void loadBitmap(String url) {

        if (loadtarget == null)
            loadtarget = new Target() {
                @Override
                public void onBitmapLoaded(Bitmap bitmap,
                        Picasso.LoadedFrom from) {
                    // do something with the Bitmap
                    handleLoadedBitmap(bitmap);
                }

                @Override
                public void onBitmapFailed(Drawable arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onPrepareLoad(Drawable arg0) {
                    // TODO Auto-generated method stub

                }
            };

        Picasso.with(this).load(url).into(loadtarget);
    }

    public void handleLoadedBitmap(Bitmap bitmap) {
        // do something here
        try {
            String root = Environment.getExternalStorageDirectory().toString();
            File myDir = new File(root + "/bBackground");
            if (!myDir.exists()) {
                myDir.mkdirs();
            }
            String name = "bBg.jpg";
            myDir = new File(myDir, name);
            FileOutputStream out = new FileOutputStream(myDir);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 70, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


        String bgImagePath = Environment.getExternalStorageDirectory()
                + "/bBackground/bBg.jpg";
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap mustOpen = BitmapFactory.decodeFile(bgImagePath, options);

        ImageView imageView = (ImageView) findViewById(R.id.imageView1);
        imageView.setImageBitmap(mustOpen);
    }

您是否在清单文件中添加了以下权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
要阅读此图像,您可以使用:

public Bitmap getBitmap(){
  File root = android.os.Environment.getExternalStorageDirectory(); 
  File dir = new File (root.getAbsolutePath() + "/bBackground");
  File image = new File(dir, "/bBg.jpg");

  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inPreferredConfig = Bitmap.Config.ARGB_8888;
  Bitmap mustOpen = BitmapFactory.decodeFile(image, options);

  ImageView imageView = (ImageView) findViewById(R.id.bofrostBgImage);
  imageView.setImageBitmap(mustOpen);
}

您是否已检查您提供的url的回调是否返回到
onBitmapLoaded
methodLog您的异常并发布logcat(如果有)@Fractal扳手它不会返回任何异常
public Bitmap getBitmap(){
  File root = android.os.Environment.getExternalStorageDirectory(); 
  File dir = new File (root.getAbsolutePath() + "/bBackground");
  File image = new File(dir, "/bBg.jpg");

  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inPreferredConfig = Bitmap.Config.ARGB_8888;
  Bitmap mustOpen = BitmapFactory.decodeFile(image, options);

  ImageView imageView = (ImageView) findViewById(R.id.bofrostBgImage);
  imageView.setImageBitmap(mustOpen);
}