2016-09-29 101 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(); 
     } 
    }