Android:从路径加载图片到imageView

4

我正在尝试从本地存储的文件路径中加载图像到一个imageView。

private final String PATH = "file:///storage/emulated/0/Downloads/image.png"

如论坛中其他地方所建议的,我尝试使用Glide加载它:

 Glide.with(this)
            .load(PATH)
            .into(imageView);

与位图/位图工厂相关:

ImageView imageView = (ImageView) findViewById(R.id.imageView);

    File f = new File(PATH);

    if(f.exists()){

        Bitmap myBitmap = BitmapFactory.decodeFile(f.getAbsolutePath());

        imageView.setImageBitmap(myBitmap);

但是我总是得到占位符图片。
在清单文件中,我添加了WRITE.EXTERNAL.STORAGE和READ.EXTERNAL.STORAGE权限。
尝试调试时,似乎将正确的路径加载到f变量中。
感谢帮助。
编辑:我已尝试所有建议的解决方案,但仍然得到空白屏幕...
我还创建了一个仅具有一个imageView的全新应用程序进行更好的测试:
package com.example.android.pic;


import android.Manifest;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;

import com.bumptech.glide.Glide;

import java.io.File;

public class MainActivity extends AppCompatActivity {


Uri PATH = Uri.fromFile(new File((Environment.getExternalStorageDirectory().getPath() + "/Pictures/agata.png")));




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int permissionCheck = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);


    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {

        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

        } else {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

        }


    }
    ImageView imageView = (ImageView) findViewById(R.id.pic);

    Glide.with(this)
            .load(PATH)
            .into(imageView);

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

    switch (requestCode) {
        case 1: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                ImageView imageView = (ImageView) findViewById(R.id.pic);

                Glide.with(this)
                        .load(PATH)
                        .into(imageView);
            } else {
                finish();

            }

        }
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
}

please help! Thanks


将其转换为Uri是否有效?Uri.parse(PATH) - Edson Menegatti
你在测试 Android 6+ 上的应用程序吗? - Amir_P
可能是从文件路径显示图像视图?的重复问题。 - Ashish Gupta
@Amir_P 是的,我正在 Android 7.0 上进行测试。您认为这是与权限相关的问题吗? - akstavrh
请查看我在@akstavrh处的答案。 - Amir_P
2个回答

1
你应该使用这段代码。
final InputStream imageStream = getContentResolver().openInputStream(imageUri);

final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);

image.setImageBitmap(selectedImage);

在这段代码中,您需要使用字符串路径StringPATH来获取图像URI。
private final StringPATH="/storage/emulated/0/Downloads/image.png"

0

您的文件路径声明有误。 请将PATH更改为

private final StringPATH="/storage/emulated/0/Downloads/image.png"

是的,我也尝试过这条路径,但我遇到了同样的问题。 - akstavrh
请尝试使用此私有最终字符串路径 = Environment.getExternalStorageDirectory()+"/Downloads/image.png"; - DevThapa

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