2016-09-29 7 views
0

Ich habe ein Problem beim Laden eines Bildes aus der Galerie in meiner Android App. Ich habe etwas Code, der ein Bild im Emulator auswählt. Wenn ich eine Auswahl treffe, wird eine Ausnahme ausgelöst und abgefangen, was bedeutet, dass das Bild nicht geladen wird, aber ich bin mir nicht sicher, wie ich feststellen soll, was passiert.Image kann nicht in ImageView geladen werden

Hier ist meine Java-Code-Datei:

@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

Sie können einige Berechtigungsproblem sein müssen. Deshalb wirft es eine Ausnahme. Können Sie auch Ausnahmeprotokolle hinzufügen? – Passiondroid

+1

1) Überprüfen Sie, ob es Bilder im Emulator gibt? 2) Überprüfen Sie das reale Gerät anstelle des Emulators. 3) Stellen Sie sicher, dass Sie die Berechtigungen android.permission.WRITE_EXTERNAL_STORAGE und android.permission.READ_EXTERNAL_STORAGE in der Manifestdatei angegeben haben. 4) Wenn Ihre Zielversion 23 ist, müssen Sie die Laufzeitberechtigung verwenden, um auf diese zuzugreifen. – Piyush

+0

Haben Sie eine Zugriffsberechtigung für Ihren externen Speicher definiert? – GrIsHu

Antwort

0

bitte Benutzer-Erlaubnis in Ihrem Manifest Datei überprüfen:

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

Hii all .. danke an alle ich habe diesen fehler aussortiert aber das Hinzufügen von Berechtigungen in meiner Activity-Datei .. Ich habe bereits eine Berechtigung in Manifest hinzugefügt .. –

1

Sie benötigen Laufzeit um Erlaubnis fragen Für WRITE_EXTERNAL_STORAGE vor wählen Sie Bild von Gallary.

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

declare Berechtigungen und Anforderungscode

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

Hier ist mein bearbeitet Code:

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