Отображение захваченного изображения в другой деятельности - PullRequest
0 голосов
/ 03 июня 2018

Я работаю над приложением для Android, и часть его требует, чтобы пользователь сделал снимок, в тот момент, когда пользователь делает снимок, он сохраняет его в файловой системе и начинает новое действие для отображения недавно снятого изображения.Действие начинается без проблем, за исключением того, что оно пустое!

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

Этометод сохраненного файла и создание намерения;

capturePicture.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        File f = capturePicture();
        Intent intent = new
        Intent(postSharingActivity.this, settingPostParam.class);
        intent.putExtra("picture", f);
        startActivity(intent);
    }
});

Это другое действие и получение файла изображения;

@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting_post_param);
        savedImage = findViewById(R.id.savedImage);
        File pic = (File) getIntent().getExtras().get("picture");
        Uri uri = Uri.fromFile(pic);
        Toast.makeText(settingPostParam.this, "+uri.toString(),Toast.LENGTH_LONG)
            .show();
            if (isStoragePermissionGranted()) {
                Picasso.get().load(uri).into(savedImage);
            } else {
                Toast.makeText(settingPostParam.this, "error", Toast.LENGTH_LONG).show();
            }
        }

[here's what it displays when I take a picture ][1]:

ОБНОВЛЕНИЕ: Я обнаружил проблему, она выполняет намерение до завершения capturePicture ().Требуется путь, прежде чем даже файл будет сохранен!Так что я вернулся к своему первоначальному пути, который меняет взгляды, а не деятельность.И добавил AsyncTask.

 private class myAsyncTask extends AsyncTask<Void,Void,Void>{
    File f;

    @Override
    protected Void doInBackground(Void... voids) {
         f=  capturePicture();
        return null;
    }
    @Override
    protected  void onPostExecute(Void result){
        String rr = f.getAbsolutePath();
        File g=new File(rr);
        Toast.makeText(postSharingActivity.this,"onBloodyClick: "+g.toString(),Toast.LENGTH_LONG).show();
        Uri uri = Uri.fromFile(g);
        Toast.makeText(postSharingActivity.this,"URI :"+uri.toString(),Toast.LENGTH_LONG).show();
        if(isStoragePermissionGranted()){
            savedImage.setImageURI(uri);
            cameraPreviewView.setVisibility(View.GONE);
            postCaptureView.setVisibility(View.VISIBLE);
        } else{
            Toast.makeText(postSharingActivity.this,"error",Toast.LENGTH_LONG).show();
        }
    }
}

А вот onClickListener

 capturePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

      new myAsyncTask().execute();


        }

    });

Я протестировал его, и это та же проблема, тосты в следующем порядке:

  1. onBloodyClick: /storage/0/emulated/0/DCIM/Camera/IMG_20180604_104845.jpg
  2. URI: файл: //// хранилище / 0 / эмулированный / 0 / DCIM / Camera /IMG_20180604_104845.jpg
  3. Сохранено: /storage/0/emulated/0/DCIM/Camera/IMG_20180604_104845.jpg

    Третий метод - метод capturePicture ().Что я здесь не так делаю?И спасибо за ответ.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Я нашел это.Проблема заключается в вызове методов и возвращаемых типов.

Возвращаемый тип метода doInBackground и тип params двух методов, onPostExecute собирается использовать результирующий файл метода doInBackground

private class myAsyncTask extends AsyncTask<File,Void,File>{

 @Override
    protected File doInBackground(File... voids) {
     File f = capturePicture();
     return f;
    }
    @Override
    protected  void onPostExecute(File f){

        String rr = f.getAbsolutePath();
        File g=new File(rr);
        Toast.makeText(postSharingActivity.this,"onBloodyClick: "+g.toString(),Toast.LENGTH_LONG).show();
        Uri uri = Uri.fromFile(g);
        Toast.makeText(postSharingActivity.this,"URI :"+uri.toString(),Toast.LENGTH_LONG).show();
        if(isStoragePermissionGranted()){
            savedImage.setImageURI(uri);
            cameraPreviewView.setVisibility(View.GONE);
            postCaptureView.setVisibility(View.VISIBLE);
        } else{
            Toast.makeText(postSharingActivity.this,"error",Toast.LENGTH_LONG).show();
        }

    } 
}

А затем на onClickListener вы указываете порядок

capturePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

      myAsyncTask task=new myAsyncTask();
      task.doInBackground();
      task.execute();


        }

    });
0 голосов
/ 03 июня 2018

Не передавайте объект файла через намерение, передайте путь (строку) файла.

 intent.putExtra("picture",f.getAbsolutePath());

И затем получите путь к файлу из этого кода

File pic = new File( getIntent().getStringExtras("picture"));
...