BitmapFactory: невозможно декодировать поток: java.io.FileNotFoundException: .jpg (нет такого файла или каталога) - PullRequest
0 голосов
/ 30 июня 2019

Доброе утро, я создаю деятельность, которая делает снимок, а затем сохраняет его в файле.Но у меня была эта ошибка:

BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: .jpg (No such file or directory)

Также я хочу знать, как сохранить этот файл picutre в моей комнате. У меня есть класс "Фото".Спасибо.Вот мой код:

takepictureActivity

public class PrendrePhoto extends AppCompatActivity {

private ImageView imageView;
private EditText titrImg2;
private Button take;
private String pathPic;

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

    imageView = (ImageView) findViewById(R.id.imageTaken);
    titrImg2 = findViewById(R.id.titreImg2);

    take = findViewById(R.id.take);
    take.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            takePicture();
        }
    });
}

private void takePicture() {
    Intent takepic = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takepic.resolveActivity(getPackageManager()) != null) {
        File pic = null;
        pic = creerPhotoFile();
        if (pic != null) {
            pathPic = pic.getPath();
            System.out.println("pic créer");
            System.out.println(pathPic);
            startActivityForResult(takepic, 1);
        }else {
            System.out.println("pic null");
        }

    }
}

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

    if (resultCode == RESULT_OK) {
        if (requestCode == 1) {
           Bitmap photo = BitmapFactory.decodeFile(pathPic);
            imageView.setImageBitmap(photo);

        }
    }

    //Hna je dois crée filePhoto

}

private File creerPhotoFile() {
    ZonedDateTime now = ZonedDateTime.now();
    String d = ("" + now.getDayOfMonth() + "/" + now.getMonthValue() + 
   "/"  + now.getYear());
    String heure = "" + now.getHour() + " : " + now.getMinute();
    String titre = titrImg2.getText().toString();
    File temp = new File("temp");
    temp.mkdirs();
    System.out.println(temp.getPath());
    File image = null;
   /*   try {
        image = File.createTempFile(titre, ".jpg",temp);//Even with this 
       it didn't work 
    } catch (IOException e) {
        e.printStackTrace();
    }*/

   image = new File(titre + ".jpg");

    return image;
   }
   }

Photo.java

   @Entity
 public class Photo implements Serializable
 {
   @PrimaryKey(autoGenerate = true)

 private int idP;
 private String titre;
 private String path ;//this path to get to help to display this picture
 private String dateHeure ;


 public Photo(String titre, String dateHeure) {
    this.titre = titre;
    this.dateHeure = dateHeure;
 }
 }

1 Ответ

0 голосов
/ 30 июня 2019

Даже после выполнения всей логики создания уникального пути к файлу вы используете

String titre = titrImg2.getText (). ToString ();

Какиеявляется (как следует из названия) заголовком изображения, который идет из пользовательского интерфейса.

image = новый файл (titre + ".jpg");

возвращаемое изображение;

Я думаю, вам нужно разобраться с этим.

Что касается сохранения изображений в комнате, это не рекомендуется.Но если вам нужно сделать это, вы можете использовать BLOB.Изображения обычно хранятся в виде BLOB-объектов, и этот тип данных предоставляет номер. BLOB-документация

Реализация может быть выполнена следующим образом:

@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
private byte[] image;
}
...