Frage an imageview, image-gallery, android, getimagedata, gallery – Android holt Bild aus der Galerie in ImageView

51

Ich versuche, ein Foto aus der Galerie zu einem hinzuzufügenImageView aber ich bekomme diesen fehler:

java.lang.RuntimeException: Fehler beim Übermitteln des Ergebnisses ResultInfo {who = null, request = 1, result = -1, data = Intent {dat = content: // media / external / images / media / 1}} zur Aktivität {hotMetter. pack / hotMetter.pack.GetPhoto}: java.lang.NullPointerException

Das ist mein Code:

<code>      Intent intent = new Intent();
      intent.setType("image/*");
      intent.setAction(Intent.ACTION_GET_CONTENT);

      startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
}
Bitmap bitmap=null;
public void onActivityResult(int requestCode, int resultCode, Intent data)
{

    if (resultCode == Activity.RESULT_OK)
    {
        if (requestCode == SELECT_PICTURE) 
        {
             Uri selectedImageUri = data.getData();           
             selectedImagePath = getPath(selectedImageUri);             
             tv.setText(selectedImagePath);
             img.setImageURI(selectedImageUri); 
         }
    }


 public String getPath(Uri uri) 
    {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor == null) return null;
        int column_index =             cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String s=cursor.getString(column_index);
        cursor.close();
        return s;
    }
</code>

Ich bekomme dieselectedImagePath="mnt/sdcard/DCIM/myimage" aber weiterimg.setImageURI(selectedImageUri); Ich bekomme den Fehler.

Ich habe auch eine verwendetBitmap und versuchte, das Bild von einzustellenSetImageBitmap Aber ich bekomme den gleichen Fehler.

LogCat:

<code>05-06 19:41:34.191: E/AndroidRuntime(8466): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/1 }} to activity {hotMetter.pack/hotMetter.pack.GetPhoto}: java.lang.NullPointerException
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.app.ActivityThread.access$2000(ActivityThread.java:117)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.os.Looper.loop(Looper.java:123)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.app.ActivityThread.main(ActivityThread.java:3683)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at java.lang.reflect.Method.invokeNative(Native Method)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at java.lang.reflect.Method.invoke(Method.java:507)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at dalvik.system.NativeStart.main(Native Method)
05-06 19:41:34.191: E/AndroidRuntime(8466): Caused by: java.lang.NullPointerException
05-06 19:41:34.191: E/AndroidRuntime(8466):     at hotMetter.pack.GetPhoto.onActivityResult(GetPhoto.java:55)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.app.Activity.dispatchActivityResult(Activity.java:3908)
05-06 19:41:34.191: E/AndroidRuntime(8466):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
</code>

Beratung bitte. Danke!

Ich habe das LogCat gepostet, bitte schauen Sie es sich an. Danke user1378505
Führen Sie die App im Debug-Modus aus und legen Sie einen Haltepunkt festif (requestCode == SELECT_PICTURE) und überprüfen Sie jede Variable beim Durchlaufen, um sicherzustellen, dass sie wie erwartet eingestellt wird. Wenn Sie eine NPE bekommenimg.setImageURI(selectedImageUri); dann auch nichtimg oderselectedImageUri sind nicht gesetzt. techiServices
Ich habe das zur Antwort gemacht. Dankbar wenn du es annimmst techiServices
Danke! Du hast recht, das Bild wurde nicht richtig eingestellt. user1378505
Kannst du posten?LogCat Ausgabe? techiServices

Deine Antwort

3   die antwort
8

Führen Sie die App im Debug-Modus aus und legen Sie einen Haltepunkt für if fest(requestCode == SELECT_PICTURE) und überprüfen Sie jede Variable beim Durchlaufen, um sicherzustellen, dass sie wie erwartet eingestellt wird. Wenn Sie eine NPE bekommenimg.setImageURI(selectedImageUri); dann auch nichtimg oderselectedImageUri sind nicht gesetzt.

109

Einfacher PassIntent zuerst:

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

Und Sie erhalten einen Bildpfad auf IhremonActivityResult:

@Override
    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 = (ImageView) findViewById(R.id.imgView);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
        }
    }

für den vollständigen QuellcodeHier

Wenn android.provider.MediaStore importiert wird, können Sie "MediaStore.Images.Media.EXTERNAL_CONTENT_URI" anstelle von "android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI" schreiben. Horatio
Es kann einige Ausnahmen geben (keine Java-Ausnahmen;)) - Die Methode .query für URI ruft nur dann die richtigen Daten ab, wenn die Absicht Daten enthält, die mit dat = content beginnen: // ... Ich habe eine Datei-Explorer-Anwendung, die dat = "file zurückgibt : /// ... - Ich kann keine gute Lösung dafür finden ... Krystian
Sie benötigen eine Berechtigung, damit dies funktioniert: <uses-permission android: name = "android.permission.READ_EXTERNAL_STORAGE" /> Pranav Mahajan
18

Versuche Folgendes:

import java.io.FileDescriptor;
import java.io.IOException;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class ImageGalleryDemoActivity extends Activity {


    private static int RESULT_LOAD_IMAGE = 1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture);
        buttonLoadImage.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {

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

                startActivityForResult(i, RESULT_LOAD_IMAGE);
            }
        });
    }


    @Override
    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 = (ImageView) findViewById(R.id.imgView);

            Bitmap bmp = null;
            try {
                bmp = getBitmapFromUri(selectedImage);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            imageView.setImageBitmap(bmp);

        }


    }



    private Bitmap getBitmapFromUri(Uri uri) throws IOException {
        ParcelFileDescriptor parcelFileDescriptor =
                getContentResolver().openFileDescriptor(uri, "r");
        FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
        Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        parcelFileDescriptor.close();
        return image;
    }


}
Die Aktivität ist jedoch nur geringfügig verzögert, wenn Sie in der Aktivität nach oben und unten scrollen. Mohammed Sufian
habe hier die ganze antwort ausprobiert, aber nur deine arbeiten klasse. Danke vielmals. Mohammed Sufian

Verwandte Fragen