Picasso库在Android上无法从SD卡加载图像。

7
我从图库中选取一份文件并尝试将其加载到图片视图中。文件路径为:/storage/sdcard0/DCIM/Camera/1436267579864.jpg。我也尝试通过Uri传递,我同时拥有SD卡的读取权限。

然而,这最终导致了onError()方法。但是同样的方法对于Web网址有效。我该如何解决这个问题?

private void getImage(File file) {

        if(file.exists()) {

            Picasso.with(activity)
                    .load(file)
                    .error(R.drawable.noimage)
                    .into(imgPreview, new Callback() {
                        @Override
                        public void onSuccess() {
                            if (progressBar != null && imgPreview != null) {

                                imgPreview.setVisibility(View.VISIBLE);
                                imgPreview.setTag("loaded");
                                progressBar.setVisibility(View.GONE);

                            }
                        }

                        @Override
                        public void onError() {
                            if (progressBar != null && imgPreview != null) {
                                imgPreview.setVisibility(View.VISIBLE);
                                progressBar.setVisibility(View.GONE);
                            }
                        }

                    });
   }


<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="21" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

你正在运行哪个版本的Android?你在清单文件中有哪些<uses-permission>元素? - CommonsWare
谢谢。我已经添加了我的清单文件。手机已经升级到最新版本(4.x)。 - pats
你尝试过使用 "file:///storage/sdcard0/DCIM/Camera/1436267579864.jpg" 吗? - ligi
1
不行,那也不起作用。 - pats
1个回答

3

虽然已经有点晚了,但我遇到了同样的问题,我是这样解决的。只需在路径开头使用并添加“file://”。看一下这个:

 Picasso.with(context) //
                    .load("file://" +myFilePath) //
                    .error(R.mipmap.error)
                    .placeholder(R.mipmap.ic_launcher)
                    .fit()
                    .tag(MyActivity.this) //
                    .into(imageView, new ImageLoadedCallback(progressBar) {
                        @Override
                        public void onSuccess() {
                            progressBar.setVisibility(View.GONE);
                        }

                        @Override
                        public void onError() {
                            Log.d("Picasso Error", "Error");

                        }
                    });

这解决了我的问题。为了帮助那些遇到同样问题并在这里寻求解决方案的人,我回答了这个问题,让他们通过此方法解决自己的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接