Android 如何将位图图像从本地存储设置为NetworkImageView

Android 如何将位图图像从本地存储设置为NetworkImageView,android,android-volley,networkimageview,Android,Android Volley,Networkimageview,我想将图像从存储设备设置为NetworkImageView。我在这里实现了,但它没有显示任何内容。在picturePath中,我得到了图像路径,但它没有显示。 1.我正在将位图图像从服务器设置为NetworkImageView。 2.然后我给编辑选项,我需要上传本地图像,但它不是按照我的代码进行 这里我的代码是 if (requestCode == RESULT_LOAD_IMAGE_C && resultCode == RESULT_OK && null !=

我想将图像从存储设备设置为NetworkImageView。我在这里实现了,但它没有显示任何内容。在picturePath中,我得到了图像路径,但它没有显示。 1.我正在将位图图像从服务器设置为NetworkImageView。 2.然后我给编辑选项,我需要上传本地图像,但它不是按照我的代码进行

这里我的代码是

if (requestCode == RESULT_LOAD_IMAGE_C && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        picturePath = cursor.getString(columnIndex);
        cursor.close();

        NetworkImageView logo = (NetworkImageView) findViewById(R.id.logo);
        logo.setImageBitmap(null);
        logo.setImageBitmap(BitmapFactory.decodeFile(picturePath));

    }
错误日志

04-10 16:26:12.779: E/Volley(6509): [574] NetworkDispatcher.run: Unhandled exception java.lang.RuntimeException: Bad URL /storage/extSdCard/DCIM/tiger.jpg
04-10 16:26:12.779: E/Volley(6509): java.lang.RuntimeException: Bad URL /storage/extSdCard/DCIM/tiger.jpg
04-10 16:26:12.779: E/Volley(6509):     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:127)
04-10 16:26:12.779: E/Volley(6509):     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110)
04-10 16:26:12.779: E/Volley(6509): Caused by: java.net.MalformedURLException: Protocol not found: /storage/extSdCard/DCIM/tiger.jpg
04-10 16:26:12.779: E/Volley(6509):     at java.net.URL.<init>(URL.java:178)
04-10 16:26:12.779: E/Volley(6509):     at java.net.URL.<init>(URL.java:127)
04-10 16:26:12.779: E/Volley(6509):     at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:101)
04-10 16:26:12.779: E/Volley(6509):     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
04-10 16:26:12.779: E/Volley(6509):     ... 1 more
04-10 16:26:12.779:E/Volley(6509):[574]NetworkDispatcher.run:未处理的异常java.lang.RuntimeException:错误的URL/storage/extSdCard/DCIM/tiger.jpg
04-10 16:26:12.779:E/Volley(6509):java.lang.RuntimeException:错误的URL/storage/extSdCard/DCIM/tiger.jpg
04-10 16:26:12.779:E/Volley(6509):位于com.android.Volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:127)
04-10 16:26:12.779:E/Volley(6509):位于com.android.Volley.NetworkDispatcher.run(NetworkDispatcher.java:110)
04-10 16:26:12.779:E/Volley(6509):由以下原因引起:java.net.MalformedURLException:找不到协议:/storage/extSdCard/DCIM/tiger.jpg
04-1016:26:12.779:E/Volley(6509):在java.net.URL.(URL.java:178)
04-1016:26:12.779:E/Volley(6509):在java.net.URL.(URL.java:127)
04-10 16:26:12.779:E/Volley(6509):位于com.android.Volley.toolbox.HurlStack.performRequest(HurlStack.java:101)
04-10 16:26:12.779:E/Volley(6509):位于com.android.Volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
04-1016:26:12.779:E/截击(6509):。。。还有一个
答复自

使用自定义imageloader缓存

public class MyCache implements com.android.volley.toolbox.ImageLoader.ImageCache {

@Override
public Bitmap getBitmap(String path) {
    if (path.contains("file://")) {
        return BitmapFactory.decodeFile(path);
    } else {
        // Here you can add an actual cache
        return null;
    }
}
@Override
public void putBitmap(String key, Bitmap bitmap) {
    // Here you can add an actual cache
}
}

此代码未经测试。使用它的风险自担

可能与您的
图片路径重复
?print it.picturePath是一个字符串,它实际上保存了我选择的图像的路径。我感到困惑,你能按照上面的方法编辑我的代码吗?谢谢我导入了那些库文件,但我的错误是“Uri类型中的fromFile(File)方法不适用于参数(String)”因为picturePath是一个字符串。我被上面的错误打动了,无论如何,非常感谢:)你检查过我有更新的答案吗?它对您有效吗?NetworkImageView类型中的方法setImageUrl(String,ImageLoader)不适用于参数(String,consumer\u edit\u profile.MyCache)…如果我像上面那样更新,我将收到此错误。。
public class MyCache implements com.android.volley.toolbox.ImageLoader.ImageCache {

@Override
public Bitmap getBitmap(String path) {
    if (path.contains("file://")) {
        return BitmapFactory.decodeFile(path);
    } else {
        // Here you can add an actual cache
        return null;
    }
}
@Override
public void putBitmap(String key, Bitmap bitmap) {
    // Here you can add an actual cache
}
}