0

Я работаю над простым проектом, где я предполагаю создать приложение для заметок. Я успешно создал приложение, но теперь хочу, чтобы пользователь мог сделать снимок и сохранить его с запиской. Я могу сделать снимок, просмотреть его и нажать «Сохранить». Но проблема в том, что я не могу получить изображение, отправленное через намерение, в мой класс MainActivity, где заметка должна быть сохранена.Извлечение захваченного изображения, отправленного через Intent

Так что мой вопрос, как я могу сохранить с изображением записку, пожалуйста, посмотрите на рисунок, который представляет, как я хочу, чтобы мой customRow выглядеть enter image description here

Я понятия не имею, почему это happends beacuse I не получится никаких ошибок ... И это заставило меня замочить. Любые идеи?

Image.class

public void capturePhoto(View view){ 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     fileUri = getOutputMediaFileUri(); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

     // start the image capture Intent 
     startActivityForResult(intent, CAPTURE_IMAGE); 
    } 
@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 

     switch (requestCode){ 
      case CAPTURE_IMAGE: 
       previewCapturedImage(); 
       break; 
     } 

    } 
    else if (resultCode == RESULT_CANCELED) { 
     // user cancelled Image capture 
     Toast.makeText(getApplicationContext(), 
       "User cancelled image capture", Toast.LENGTH_SHORT) 
       .show(); 
    } else { 
     // failed to capture image 
     Toast.makeText(getApplicationContext(), 
       "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
       .show(); 
    } 

} 
private void previewCapturedImage() { 
    try { 
     // bitmap factory 
     BitmapFactory.Options options = new BitmapFactory.Options(); 

     // downsizing image as it throws OutOfMemory Exception for larger 
     // images 
     options.inSampleSize = 2; 

     bitmap = BitmapFactory.decodeFile(fileUri.getPath(), 
       options); 

     //Set image here 
     imageView.setImageBitmap(bitmap); 

    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } 
} 

public void sendImageAsIntent(Boolean isSending){ 
    if(isSending = false){ 
     isSending = true; 

    } 
    if(isSending = true) { 
     Intent i = new Intent(CheckOutMemo.this, MainActivity.class); 
     i.putExtra("filePath", fileUri.getPath()); 
     setResult(RESULT_OK,i); 
     finish(); 
    } 
} 

MainActivity.class

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

    if (resultCode != Activity.RESULT_OK) { 
     return; 
    } 
    if (requestCode == Image.ADD_REQUEST_CODE) { 
     String header = data.getStringExtra("header"); 
     String bodyText = data.getStringExtra("bodyText"); 

     filePath = data.getStringExtra("filePath"); 
     sourceFile = new File(filePath); 
     fileName = data.getStringExtra("filePath"); 
     Uri imageUri = data.getData(); 
     if(filePath!=null) { 
      try { 
       Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri); 
       imageIcon.setImageBitmap(bitmap); 

      } catch (FileNotFoundException e) { 
       Toast.makeText(MainActivity.this, "FileNoutFoundException MainActivity", Toast.LENGTH_SHORT).show(); 
       e.printStackTrace(); 
      } catch (IOException e) { 
       Toast.makeText(MainActivity.this, "IOException MainActivity", Toast.LENGTH_SHORT).show(); 
       e.printStackTrace(); 
      } 
     } 


     Memo memo = new Memo(header, bodyText,imageIcon); 
     customAdapter.add(memo); 
     customAdapter.notifyDataSetChanged(); 
    } else if (requestCode == Image.EDIT_REQUEST_CODE) { 

     int position = data.getIntExtra("position", 0); 
     Memo memo = customAdapter.getItem(position); 
     memo.header = data.getStringExtra("header"); 
     memo.bodyText = data.getStringExtra("bodyText"); 
     customAdapter.notifyDataSetChanged(); 
    } 

} 
+0

«Я не в состоянии получить изображение, отправленное через намерение моего MainActivity класс» - пожалуйста, объясните, что вы имеете в виду под этим. – CommonsWare

ответ

1

Когда вы делаете:

Intent i = new Intent(CheckOutMemo.this, MainActivity.class); 
i.putExtra("filePath", fileUri.getPath()); 
startActivity(i); 

Вы, в основном просят создать новый экземпляр MainActivity. Для возврата к предыдущей деятельности при установке в результате этого вместо:

setResult(RESULT_OK, i); 
finish();//finishing activity 
+0

Спасибо @Shaishav. На этот раз, по крайней мере, я получил ошибку. java.lang.RuntimeException: Ошибка доставки результата ResultInfo {who = null, request = 1, result = -1, data = Intent {cmp = com.dahlstore.dnote5/.MainActivity (имеет дополнительные функции)}} для действия {com .dahlstore.dnote5/com.dahlstore.dnote5.MainActivity}: java.lang.NullPointerException на MainActivity.onActivityResult (MainActivity.java:116) Строка 116 мой: растровые растровый = MediaStore.Images.Media.getBitmap (this.getContentResolver(), imageUri); Я обновил код выше – user3506

+0

Я предполагаю, что мой файлUri.getPath() пуст, отправляя его как право на намерение? – user3506

+0

@ user3506 да, попробуйте отладить его с помощью контрольных точек – Shaishav