2015-06-10 3 views
1

Я новичок в android, и я пытаюсь сделать снимок камеры и отобразить его на изображении. Когда изображение захвачено, оно сохраняется правильно, но после этого приложение перестает работать, когда изображение должно отображаться в виде изображения. Любая помощь приветствуется. Я искал некоторые темы, но ничего не работает. Вот код:Ошибка при просмотре изображения при отображении изображения с помощью захвата камеры

package myfirstapp.myapps.me.camera; 

import ... 

public class MainActivity extends ActionBarActivity { 
    ImageButton camBtn; 
    ImageView imageView; 
    ScrollView scrollView; 

    private File imageFile; 

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

    public void OpenCam(View view) { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     imageFile=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"image.jpg"); 
     Uri tempURI=Uri.fromFile(imageFile); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, tempURI); 
     intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 

     startActivityForResult(intent, 0); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 0)//==0 the same where startActivityForResult(intent, 0) so we are in the same process 
     { 


      switch (resultCode){ 
       case Activity.RESULT_OK: 
        if(imageFile.exists()) 
        { 
         Toast.makeText(MainActivity.this, "Image was saved at "+imageFile.getAbsolutePath(), Toast.LENGTH_SHORT) 
           .show(); 
         Bitmap myBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); 

         ImageView myImage = (ImageView) findViewById(R.id.imageView); 

         myImage.setImageBitmap(myBitmap); 
        } 
        else 
        { 
         Toast.makeText(MainActivity.this, "Image wasn't saved", Toast.LENGTH_SHORT) 
           .show(); 
        } 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(MainActivity.this, "Image capture was cancelled", Toast.LENGTH_SHORT) 
          .show(); 
        break; 
      } 
     } 
    } 
} 

StackTrace

Вызванный: java.lang.RuntimeException: Сбой доставки результата ResultInfo {кто = NULL, запрос = 0, результат = -1, данные = нуль} для деятельности {myfirstapp.myapps.me.camera/myfirstapp.myapps.me.camera.MainActivity}: java.lang.NullPointerException на android.app.ActivityThread.deliverResults (ActivityThread.java:3410) на андроид .app.ActivityThread.performResumeActivity (ActivityThread.java:2817) на android.app.ActivityThread.handleResumeActivity (ActivityThread.java:2859)

+0

StackTrace Пожалуйста, –

+0

Я новичок в android, что вы подразумеваете под этим? – droidnation

+0

Вызвано: java.lang.RuntimeException: Ошибка предоставления результата ResultInfo {who = null, request = 0, result = -1, data = null} в действие {myfirstapp.myapps.me.camera/myfirstapp.myapps.me.camera .MainActivity}: java.lang.NullPointerException в android.app.ActivityThread.deliverResults (ActivityThread.java:3410) на android.app.ActivityThread.performResumeActivity (ActivityThread.java:2817) в android.app.ActivityThread.handleResumeActivity (ActivityThread.java:2859) – droidnation

ответ

0

Пожалуйста, пройти через этот код:

public static final int REQUEST_IMAGE_CAPTURE = 1; 
    public static final int RESULT_LOAD_IMAGE = 10; 
    private Bitmap myBitmap; 
    ImageView myImage ; 
     public void OpenCam(View view) { 

       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) 
    { 


     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) 
     { 
      Bundle extras = data.getExtras(); 
      myBitmap= (Bitmap) extras.get("data"); 

      myImage = (ImageView) findViewById(R.id.imageView); 

        myImage.setImageBitmap(myBitmap); 
     } 

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

      myBitmap= BitmapFactory.decodeFile(picturePath); 

      //   photoUri = picturePath; 



     myImage.setImageBitmap(myBitmap); 

     } 

    } 
+0

По-прежнему такая же ошибка – droidnation

+0

Проще показать Logcat. –

+0

06-10 06: 46: 58.126 3921-3921/myfirstapp.myapps.me.camera W/EGL_genymotion: eglSurfaceAttrib не реализован 06-10 06: 46: 58.130 3921-3921/myfirstapp.myapps.me.camera E/OpenGLRenderer : Получение MAX_TEXTURE_SIZE из GradienCache 06-10 06: 46: 58.130 3921-3921/myfirstapp.myapps.me.camera E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384 06-10 06: 46: 58.158 3921-3921/myfirstapp.myapps.me .camera E/OpenGLRenderer: Получение MAX_TEXTURE_SIZE из кеша :: initConstraints() 06-10 06: 46: 58.162 3921-3921/myfirstapp.myapps.me.camera E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384 – droidnation

0

Почему вы первый экономить и пытается показать сохраненный файл изображения. Используйте возвращенный data от onActivityResult. Прежде чем файл будет создан в памяти, передается широковещательная передача, чтобы он мог обновить каталог и показать новый файл. Но лучше использовать то, что намерение камеры возвращается в качестве данных.

Замените этот код

Bitmap myBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); 

         ImageView myImage = (ImageView) findViewById(R.id.imageView); 

         myImage.setImageBitmap(myBitmap); 

с этим

ImageView myImage = (ImageView) findViewById(R.id.imageView); 
Bitmap photo = (Bitmap) data.getExtras().get("data"); 
       myImage.setImageBitmap(photo); 
+0

Я сделал это. Теперь я получил сообщение о том, что «Изображение не было сохранено». – droidnation

+0

Вызвано: java.lang.RuntimeException: Ошибка доставки результата ResultInfo {who = null, request = 0, result = -1, data = null} в действие {myfirstapp.myapps.me.camera/myfirstapp.myapps.me.camera .MainActivity}: java.lang.NullPointerException в android.app.ActivityThread.deliverResults (ActivityThread.java:3410) на android.app.ActivityThread.performResumeActivity (ActivityThread.java:2817) в android.app.ActivityThread.handleResumeActivity (ActivityThread.java:2859) – droidnation

0

первый: комментарий линии intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // no need to write для камеры захвата

второй: используйте эту строку

imageFile=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/abc); // abc folder name 

вместо

imageFile=new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"image.jpg"); 

Примечание: ваш код работает ДО KitKat но леденец это приведет к краху, потому что в lollipop imageFile возвращает null, поэтому Uri не удалось преобразовать в файл. Надеюсь, ваша проблема будет решена. и еще одна вещь перед открытой камерой u должна проверить разрешение sdcard.

+0

Сэр, я новичок в android, могу ли я изменить настройку этого проекта для компиляции в леденец или просто создать новый проект? – droidnation

+0

перейти к файлу манифеста ur (AndroidManifext.xml) и изменить андроид: maxSdkversion = 21 – anu

+0

Вызвано: java.lang.RuntimeException: Ошибка доставки результата ResultInfo {who = null, request = 0, result = -1, data = null} к действию {myfirstapp.myapps.me.camera/myfirstapp.myapps.me.camera.MainActivity}: java.lang.NullPointerException at android.app.ActivityThread.deliverResults (ActivityThread.java:3410) at android.app.ActivityThread .performResumeActivity (ActivityThread.java:2817) at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:2859) – droidnation

Смежные вопросы