2015-06-29 4 views
0

Я хочу отобразить захваченное изображение из намерения камеры внутри ImageView. Я могу открыть камеру и создать каталог для изображения, но когда я передаю изображение с помощью намерения и попытаюсь его вызвать, изображение не будет отображаться. Это то, что я делаю:Изображение камеры не отображается в ImageView

private static final int REQUEST_CODE = 1; 
private ImageView addPicture; 
private Bitmap bitmap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(//setting the view); 

    addPicture.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages"); 
      imagesFolder.mkdirs(); // <---- 
      File image = new File(imagesFolder, "image_001.jpg"); 
      Uri uriSavedImage = Uri.fromFile(image); 
      imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
      startActivityForResult(imageIntent, 0); 
     } 
    }); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    addPicture = (ImageView) findViewById(R.id.profilepicture_registerone); 

    if (requestCode == REQUEST_CODE) { 
     if (resultCode == RESULT_OK) { 
      try { 
       InputStream stream = getContentResolver().openInputStream(data.getData()); 
       bitmap = BitmapFactory.decodeStream(stream); 
       addPicture.setImageBitmap(bitmap); 
       stream.close(); 


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

      } 

      RoundImage image = new RoundImage(bitmap); 

     } else if (resultCode == RESULT_CANCELED) { 
      // User cancelled the image capture 
     } else { 
      Toast.makeText(getApplicationContext(), "Bad Image Request. Please Try Again!", Toast.LENGTH_LONG).show(); 
     } 
    } 

} 

Мои права:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

<uses-feature android:name="android.hardware.camera" /> 

И мой ImageView в XML:

<ImageView 
    android:layout_width="200dp" 
    android:layout_height="200dp" 
    android:id="@+id/profilepicture_registerone" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="50dp" 
    android:clickable="true" 
    android:onClick="addPicture" /> 

EDIT: Я имел неправильные идентификаторы из-за меня попытки изменить вещи для этого сообщения. Я изменил их обратно на оригинальный идентификатор, чтобы избежать путаницы.

EDIT 2: После дальнейших испытаний я обнаружил, что никакие изображения не установлены внутри метода onActivityResult(). Я попытался загрузить изображение с возможностью рисования, и это тоже не сработало. Он работал, когда я назвал его внутри onCreate().

+0

нашел решение? @solomon Powell – Mano

+0

@ Мано, к счастью, нет. Я даже попробовал загрузить изображение запаса из моей доступной папки в качестве файла изображения внутри 'onActivityResult()', и это тоже не работает. Что странно, так как вызывается OnActivityResults. –

+0

http://stackoverflow.com/a/30977539/4447803, попробуйте этот код, сомневайтесь, спросите меня - он будет работать как с галереей, так и с камерой с урожаем. – Mano

ответ

1

Вам необходимо найти свой ID ImageView в onCreate() с соответствующим идентификационным тегом.

addPicture = (ImageView) findViewById(R.id.profilepicture_registerone); 

И

Пожалуйста, проверьте ваш растровый, это пустое или нет?

+0

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

+0

. Ваше растровое изображение равно null? –

+0

Я обнаружил, что метод 'data.getData()' возвращает значение null и выдает исключение NullPointerException при тестировании, если оно null или нет. –

0

Вы уверены, что используете для своего изображения правильный идентификатор. В коде идентификатор в xml является «картиной», но вы ссылаетесь на profilepicture_registerone в java?

+0

Я изменил некоторые вещи ради этого сообщения и забыл изменить их все. Я вернул их из-за этого, но ошибка по-прежнему происходит даже с правильными идентификаторами –

+0

Сохраняется ли изображение на телефоне, можете ли вы просматривать изображение с помощью других приложений? –

+0

Да. Изображение сохраняется как «image_001.jpg» внутри папки «MyImages». –

1

Попробуйте это,

Объявите константу в области Класс:

final int TAKE_PHOTO_REQ = 100; 

Invoke Намерение Камера:

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, TAKE_PHOTO_REQ); 

Добавить onActivityResult (..) в вашей деятельности

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
     case TAKE_PHOTO_REQ: { 
      if (resultCode == TakePicture.RESULT_OK && data != null) { 

       Bitmap myBmp = (Bitmap) data.getExtras().get("data"); 



       imageView.setImageBitmap(myBmp); 
       break; 
      } 
     } 
     } 
    } 

* По-прежнему возникают проблемы, то проверить ImageView, если это правильно или нет.

Надеюсь, это будет полезно ... спасибо