priyanshbhaliya Ответов: 1

почему capture image path возвращает null в android


это простое приложение для захвата изображений..

В этом коде я использую intent для камеры, а после захвата изображения и нажатия кнопки ok с камеры он устанавливается в режим просмотра изображения

но когда я пытаюсь найти путь изображения из намерения, он возвращает исключение нулевого указателя.

Почему он возвращает null????

если изображение настроено на imageview, то оно хранится в любом месте эмулятора android, так почему же оно возвращает null??


public class CameraAppActivity extends Activity implements OnClickListener {
    Button btnsetwall;
    ImageButton imgbtntakeph;
    ImageView Imview;
    static final int REQUEST_IMAGE_CAPTURE = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera_app);
        Imview = (ImageView) findViewById(R.id.imageView1);
        imgbtntakeph = (ImageButton) findViewById(R.id.imageButton1);
        btnsetwall = (Button) findViewById(R.id.button1);
        imgbtntakeph.setOnClickListener(this);
        btnsetwall.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.camera_app, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.imageButton1:
            dispatchTakePictureIntent();
        case R.id.button1:

            break;
        }

    }

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            Imview.setImageBitmap(imageBitmap);
            Toast.makeText(CameraAppActivity.this,"Here "+ data.getData(), Toast.LENGTH_LONG).show();
        }
    }
} 

1 Ответов

Рейтинг:
9

BupeChombaDerrick

Попробуй

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");

            Imview.setImageBitmap(imageBitmap);

            // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
            Uri tempUri = getImageUri(getApplicationContext(), imageBitmap);

            // CALL THIS METHOD TO GET THE ACTUAL PATH
            Toast.makeText(CameraAppActivity.this,"Here "+ getRealPathFromURI(tempUri),                 Toast.LENGTH_LONG).show();
        }
    }

public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
}


Для получения дополнительной информации проверьте http://stackoverflow.com/questions/20327213/getting-path-of-captured-image-in-android-using-camera-intent[^]

Надеюсь, это поможет.


priyanshbhaliya

вами много.....

BupeChombaDerrick

Добро пожаловать.

priyanshbhaliya

можете ли вы объяснить, почему намерение непосредственно дает нулевой путь изображения??

BupeChombaDerrick

Кажется, вы должны вставить изображение, используя "изображения.Media. insertImage () " для того, чтобы он был сохранен на SD-карту и чтобы MediaStore мог создать для него путь. Цель, по-видимому, состоит только в том, чтобы вернуть необработанные данные изображения. Но я не очень уверен.

priyanshbhaliya

хорошо...и когда я тестирую mycode в реальном устройстве, он возвращает правильный путь, а не null..
это приводит меня в замешательство, потому что..."в эмуляторе" он возвращает null, а в "реальном устройстве" - полный путь к изображению..

BupeChombaDerrick

Нет, эмулятор точно такой же, как и реальное устройство, поэтому, если он не работает на эмуляторе, он не будет работать на реальном устройстве. Таким образом, он вернет null даже на реальном устройстве. Ваш эмулятор и реальное устройство могут работать под управлением разных версий ОС android, проверьте версии.

priyanshbhaliya

хорошо, я проверю и попробую это...thnks

BupeChombaDerrick

Добро пожаловать :).