如何使用Picasso打开存储在android本地的图像?

时间:2016-07-30 08:23:31

标签: java android android-volley picasso

我希望我的应用程序能够在没有互联网可用时从设备存储中检索和显示图像。所以当应用程序第一次加载互联网时,我将图像下载到文件夹中,之后当没有互联网我要求它从本地存储打开。 我的图像存储在此位置

  

/storage/emulated/0/shatayushi/shatayushi_cover3.jpg

在凌空响应中,我调用以下代码,该代码用于为recyclerview设置适配器。

 public ArrayList showJSON(String json) {
        ParseJSON pj = new ParseJSON(json);
        pj.parseJSON();

        image_url = ParseJSON.img_url;
        mag_version = ParseJSON.magversion;
        download_path = ParseJSON.download_url;
        sample_url = ParseJSON.sample_url;

        for (String img : image_url) {
            downloadImages(img);
        }

        File sh_images = new File(Environment.getExternalStorageDirectory()+"/shatayushi");
        String[] img_files = sh_images.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String filename)
            {
                if (filename.toLowerCase().endsWith(".jpg"))
                {
                    return true;
                }else {
                    return false;
                }
            }
        });

        String stored_imgurl[]= new String[img_files.length];

     for (int i=0; i<img_files.length;i++)
     {
         stored_imgurl[i]="/storage/emulated/0/shatayushi/"+img_files[i];
     }

        Log.d("StoredImages",stored_imgurl[0]);


        ArrayList android_version = new ArrayList<>();


        for (int i = 0; i < image_url.length; i++) {
            MagazineVersion magazineVersion = new MagazineVersion();
            magazineVersion.setMagazine_version_name(mag_version[i]);
            magazineVersion.setMagazine_image_url(image_url[i]);
            magazineVersion.setDownload_url(download_path[i]);
            magazineVersion.setSample_url(sample_url[i]);
            magazineVersion.setStored_imgurl(stored_imgurl[i]);
            android_version.add(magazineVersion);
        }
        return android_version;

    }

根据凌空的反应,我将上述方法称为: -

ArrayList androidVersions = showJSON(response);

                        DataAdapter adapter = new DataAdapter(DisplayMagazine.this, androidVersions);
                        recyclerView.setAdapter(adapter); 

在我的DataAdapter中,我使用Picasso显示图像如下: -

Picasso.with(context).load(magazineVersions.get(position).getStored_imgurl()).resize(400, 500).into(holder.iv_magazine);

这是我的日志猫的一部分: -

  

07-30 13:44:12.633 16766-16766 / com.inevitablesol.shatayushiapp   I / dalvikvm:DexOpt:非法方法访问(调用   Landroid / support / v7 / widget / RecyclerView $ ViewHolder; .isUpdated()Z来自   LCOM / inevitablesol / shatayushiapp /适配器/ DataAdapter的$ ViewHolder;)   07-30 13:44:12.633 16766-16766 / com.inevitablesol.shatayushiapp   I / dalvikvm:找不到方法   android.support.v7.widget.RecyclerView $ ViewHolder.isUpdated,   从方法中引用   com.inevitablesol.shatayushiapp.adapter.DataAdapter $ ViewHolder.access $超级   07-30 13:44:12.633 16766-16766 / com.inevitablesol.shatayushiapp   W / dalvikvm:VFY:无法解析虚方法17450:   Landroid / support / v7 / widget / RecyclerView $ ViewHolder; .isUpdated()Z

其中说非法方法访问且无法找到方法android.support.v7.widget.RecyclerView$ViewHolder.isUpdated,从方法com.inevitablesol.shatayushiapp.adapter.DataAdapter$ViewHolder.access$super引用。

任何人都可以帮我解决一下我刚接触编程的解决方案。谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用以下方式从SDCARD /设备存储中加载文件:在您的情况下,您必须确定文件是否可用于存储。然后决定从网络或存储加载

Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);

确保您传递的是图像的完整路径

documentaion

读取