我希望我的应用能够在没有互联网的情况下从设备存储中检索和显示图像,因此当应用第一次通过互联网加载时,我会将图像下载到文件夹中,然后在没有互联网的情况下询问从本地存储打开。
我的图像存储在此位置


  /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 / adapter / 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 $ super
  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引用的。

谁能为我提供编程方面的新手解决方案,谢谢。

最佳答案

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

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


确保您通过图像全路径

documentaion读取

08-18 06:22
查看更多