2016-05-23 20 views
1

Android開発が初めてで、現在Bitmapで作業していますが、デバッグするたびにデバイスのファイルパスからビットマップを設定しようとしていますが、まだヌルです私は既に同様の質問を探していますが、私は何人かの人々の提案をしていますが、まだ動作していません。誰かが私に間違っていることの手がかりを与えることができますか?AndroidスタジオでBitmapを設定するとヌルになる

private int PICK_IMAGE_REQUEST = 1; 

private ImageButton buttonChoose; 
private Button buttonUpload; 
private Button buttonView; 

private ImageView imageView; 

private Bitmap bitmap; 

private Uri filePath; 



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

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 

     filePath = data.getData(); 
     Toast.makeText(this,filePath.toString(),Toast.LENGTH_LONG); 

     try { 

      bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), filePath); 
      imageView.setImageBitmap(bitmap); 



     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

private void showFileChooser() { 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 
    } 

このラインからのデバッグ:

bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), filePath); 
       imageView.setImageBitmap(bitmap); 

それがヌルで保持し、私はアプリを続行することはできません。

このすべてのヘルプは高く評価され、デバッグのスクリーンショット
enter image description here

で、感謝

答えて

0

私の画像はすべてSDカードにあったことから、私は許可を追加する必要がありました。おそらく初心者のエラーですが、私は本当に感謝しています。

0

この

String path; 
Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.Media.DATA}, null, null, null); 
if(cursor.moveToFIrst()){ 
    path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
    cursor.close; 

    //get bitmap from path; 
    // you can also check whether the file exists and can be read here(not necessary).If you do that try to use DocumentFile 
    bitmap=BitmapFactory.decodeFile(path); 
} 
+0

この場合、nullのままのカーソルです。/ –

+0

filePathを表示するために乾杯しました。それが示すものを教えてくれますか? –

+0

実際、私はファイルパスが何であるかを示すためにこれを使用しましたが、アプリケーションが表示される前にクラッシュするので、役に立たないだけです。 –

0

を試してみてください、あなたのonActivityResult()メソッドの変化の下に作るとしようと、

ください。

うまくいくと思います。

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

と私はビットマップが正しく取得できなかった理由は次のとおりです。私は問題を発見

try 
    { 
     // When an Image is picked 
     if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK 
       && null != data) { 
      // Get the Image from data 

      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

      // Get the cursor 
      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      // Move to first row 
      cursor.moveToFirst(); 

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

      // Set the Image in ImageView after decoding the String 
      imageView.setImageBitmap(BitmapFactory 
        .decodeFile(imgDecodableString)); 

     } else { 
      Toast.makeText(this, "You haven't picked Image", 
        Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG) 
       .show(); 
    } 
+0

こんにちは、どこでimgDecodableStringを宣言しますか?私は文字列フィールドとして試しましたが、例外は対応するtryブロックに投げられることはなく、まだテストできません。 –

+0

編集済みのans plsを確認してください – Vickyexpert

+0

見つけました。 –

関連する問題