2016-09-29 134 views
0

我在从我的Android应用程序库中加载图像时遇到问题。我有一些代码在模拟器中选择一个图像。当我做出选择时,会抛出并捕获异常,这意味着图像无法加载,但我不确定如何诊断发生了什么。无法将图像加载到ImageView

这里是我的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(); 
    } 
} 

}

+0

你可能有一些权限问题。这就是为什么它抛出异常。你还可以添加异常日志吗? – Passiondroid

+1

1)检查模拟器中是否有图像? 2)检查真实的设备而不是仿真器。 3)必须确保已在清单文件中给出了'android.permission.WRITE_EXTERNAL_STORAGE'和'android.permission.READ_EXTERNAL_STORAGE'权限。 4)如果你的目标版本是23,那么你必须使用运行时权限来访问它。 – Piyush

+0

您是否定义了访问您的外部存储的权限? – GrIsHu

回答

0

请用户许可,您清单文件:

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

嗨所有..谢谢大家,我整理了这个错误但在我的活动文件中添加权限..我已经在清单中添加权限.. –

1

你要问运行许可对于 之前的WRITE_EXTERNAL_STORAGE,您从gallary中选择图像。

<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 
      } 
     } 
    } 
0

这里是我的编辑代码:

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(); 
     } 
    }