2016-11-10 7 views
0

Ich habe diesen Code, aber wenn ich auf den Button klicke, wird die Galerie geöffnet und wenn ich ein Bild wähle, wird die Galerie wieder geschlossen. Und nichts wird passieren.Wählen Sie Bild in der Galerie

public class MainActivity erweitert AppCompatActivity {

private Button loadimagebutton; 
private ImageView imageView; 

private static int RESULT_LOAD_IMAGE = 1; 

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

    loadimagebutton = (Button) findViewById(R.id.button); 

    loadimagebutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, RESULT_LOAD_IMAGE); 
     } 
    }); 
} 

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

    if(requestCode == RESULT_LOAD_IMAGE && 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(); 

     imageView = (ImageView)findViewById(R.id.imageView); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
    } 
    else{ 
     Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_LONG).show(); 
    } 
} 

Was ist falsch?

+0

Nichts wird passieren einstellen können? Kein Fehler Toast? Kein Unfall? Nun, 'decodeFile()' hat 'null' anstatt einer gültigen Bitmap zurückgegeben. Vor Gebrauch prüfen und melden. – greenapps

+0

Haben Sie versucht, in die if-Anweisung ein Log.d einzufügen, um zu sehen, ob es Ihre Logik korrekt verarbeitet? – drew

Antwort

1

Ich hoffe, das hilft Ihnen:

private String getRealPathFromUri(Uri contentURI) { 
    String result = ""; 
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
    if (cursor == null) { 
     result = contentURI.getPath(); 
    } else { 
     cursor.moveToFirst(); 
     int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
     result = cursor.getString(idx); 
     cursor.close(); 
    } 
    return result; 
} 

und in onActivityResult();

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

    switch (requestCode) { 
     case RESULT_LOAD_IMG: 
      if (resultCode == RESULT_OK) { 
       Uri selectedImage = imageReturnedIntent.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 filePath = cursor.getString(columnIndex); 
       cursor.close(); 


       Bitmap bMap = BitmapFactory.decodeFile(filePath); 
       handlePhotoUpload(bMap); 
      } 
    } 
} 

und in Ihrem handlePhotoUpload Methode Sie das Image auf die Bitmap

+0

Dieser Code entspricht dem ursprünglichen Code. Warum hast du es gepostet? – greenapps

+0

@greenapps Es ist etwas anders. Ich benutze es derzeit in meiner Anwendung und ich weiß, dass es funktioniert. – drew

+0

Warum erzählst du nicht, was daran anders ist? Erklären Sie bitte Ihren Code/Änderungen. – greenapps

Verwandte Themen