2016-09-02 2 views
2

このpageのプログラムがsdカードから画像を取得してimageViewに表示するプログラムを見つけました。私はこのラインで問題を取得しています -SDカードから画像を取得してImageViewに表示する際の問題

bitmap = BitmapFactory.decodeFile(picturePath); 

私はpicturePath変数の正しい値を取得していますが、上記の行で、それがnullとしてビットマップ値を設定しています。私はさまざまなスレッドを訪れていて、ほとんどすべての人がこの同じ行を使用しています。私は私のコードここ

と間違っているものを得るわけではないです、私の完全なコード -

private Button upload; 
    ImageView imgView; 
    EditText caption; 
    Bitmap bitmap; 

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

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

     upload = (Button) findViewById(R.id.Upload); 
     caption = (EditText) findViewById(R.id.caption); 
     imgView.setImageResource(R.drawable.ic_menu_gallery); 
     upload.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       Intent i = new Intent(Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, 2); 
      } 
     }); 
    } 

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

     if (requestCode == 2 && 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]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 

      bitmap = BitmapFactory.decodeFile(picturePath); 
      imgView.setImageBitmap(bitmap); 
      caption.setText("Hello"); 
     } 
    } 
+0

これは、 'MediaStore'から' Uri'を使う方法ではありません。ユーザーが選択したイメージがリムーバブルストレージに保存されている場合、コードは約10億個のデバイスで失敗します。 [適切に 'Uri'を使用してください(https://commonsware.com/blog/2016/03/15/how-consume-content-uri.html)。 – CommonsWare

+0

ありがとう@CommonsWare、私はあなたのブログを通過し、自分のコードを変更します。 – Shubh

答えて

1

はあなたが持っていることを確認し、その後

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

あなたのAndroidManifest.xmlでこれを入れてみてくださいあなたのデバイスのApp Info画面で許可を有効にしてください。

+1

ありがとう@JasonLeddy、それは私のために働いた。 – Shubh

関連する問題