【问题标题】:Can't load Image into an ImageView无法将图像加载到 ImageView
【发布时间】:2016-09-29 06:33:02
【问题描述】:

我在我的 Android 应用中从图库中加载图片时遇到问题。我有一些代码可以在模拟器中选择图像。当我进行选择时,会引发并捕获异常,这意味着图像无法加载,但我不确定如何诊断发生的情况。

这是我的 java 代码文件:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    galleryImage = (ImageView) findViewById(R.id.imageView);
    pick_btn = (Button)findViewById(R.id.button);
    pick_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i,RESULT_LOAD_IMG);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {

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

            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            Log.i("Image Column Index..", "hoiiii");
            assert cursor != null;
            cursor.moveToFirst();

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

            galleryImage.setImageBitmap(BitmapFactory.decodeFile(picturePath));
        }
    }catch (Exception e)
    {
        Toast.makeText(getApplicationContext(),"You haven't picked any image",Toast.LENGTH_LONG).show();
    }
}

}

【问题讨论】:

  • 您可能遇到了一些权限问题。这就是它抛出异常的原因。还能加异常日志吗?
  • 1) 检查模拟器中是否有图像? 2)检查真实设备而不是模拟器。 3) 必须确保您已在清单文件中授予android.permission.WRITE_EXTERNAL_STORAGE 和android.permission.READ_EXTERNAL_STORAGE 权限。 4) 如果您的目标版本是 23,那么您必须使用运行时权限才能访问它。
  • 您是否定义了访问外部存储的权限?
  • @GrIsHu Ek help kari de ne jo solution janti hoy to stackoverflow.com/questions/39741777/…

标签: android imageview


【解决方案1】:

您需要在运行前请求 WRITE_EXTERNAL_STORAGE 的运行时权限 您从图库中选择图像。

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

声明权限和请求代码

private static final String[] REQUEST_PERMISSIONS = new String[]{
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };
    private static final int REQUEST_PERMISSION_CODE = 007;
//check if permissions are needed

       if (!checkPermission()) {
            requestPermission();
        } else {
//open gallary and pick image      
  }



private boolean checkPermission () {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                return true;
            }
            for (String permission : REQUEST_PERMISSIONS) {
                if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }


            return true;
        }
    private void requestPermission () {
        ActivityCompat.requestPermissions(this, REQUEST_PERMISSIONS, REQUEST_PERMISSION_CODE);
    }

    @Override
    public void onRequestPermissionsResult ( int requestCode, @NonNull String[] permissions,
    @NonNull int[] grantResults){
        if (requestCode == REQUEST_PERMISSION_CODE) {
            if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //open gallary and pick image
            }
        }
    }

【讨论】:

    【解决方案2】:

    请检查您的清单文件中的用户权限:

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

    【讨论】:

    • 大家好..谢谢大家我解决了这个错误,但在我的活动文件中添加了权限..我已经在清单中添加了权限..
    【解决方案3】:

    这是我编辑的代码:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            try
            {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
                {
                    if (!Settings.System.canWrite(this) && (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK && null != data))
                    {
                        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                                Manifest.permission.READ_EXTERNAL_STORAGE}, 2909);
    
                        Uri selectedImage = data.getData();
                        String[] filePathColumn = {MediaStore.Images.Media.DATA};
    
                        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                        assert cursor != null;
                        cursor.moveToFirst();
    
                        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                        picturePath = cursor.getString(columnIndex);
                        cursor.close();
    
                        imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
                    }
                }
            } catch (Exception e)
            {
                Toast.makeText(getApplicationContext(), "Something went wrong", Toast.LENGTH_LONG).show();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-04
      相关资源
      最近更新 更多