При отправке электронного письма + вложения из пользовательского приложения в Android Studio, почему URI является пустым? - PullRequest
0 голосов
/ 14 декабря 2018

Здравствуйте Я работаю над приложением, которое может отправить электронное письмо с вложением.Я полностью застрял.Я не могу прикрепить приложение к своему приложению.Я нажимаю кнопку вложения, и я могу выбрать изображение, но каждый раз, когда я нажимаю изображение, приложение вылетает.

LogCat дает мне исключение NullPointerException и говорит, что проблема в «Log.e (« Attachment Path: », attachmentFile);»поэтому я предполагаю, что что-то идет не так, когда я пытаюсь сохранить его, так как файл attachmentFile равен нулю.

Я не могу понять, почему значение файла attachmentFile равно нулю, так как по этой причине я получаю исключение NullPointerException.

Я ценю любую помощь, которую я могу получить.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK)
            {
                Uri selectedImage = data.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(selectedImage, 
                 filePathColumn, null,null,null);
                cursor.moveToFirst();
                columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                attachmentFile = cursor.getString(columnIndex);
                Log.e("Attachment Path: ", attachmentFile);
                URI = Uri.parse("file://" + attachmentFile);
                cursor.close();
            }
        }

Вот авария

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=101, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:39 flg=0x1 }} to activity {com.example.william.mailappen/com.example.william.mailappen.MainMail}: java.lang.NullPointerException: println needs a message

ОБНОВЛЕНИЕ Я использую этот метод, чтобы открыть галерею изображений

public void pictureGallery(){
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.putExtra("return-data", true);
    startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_GALLERY);
}

2: nd UPDATE

Не знаю, правильно ли я это делаю или это правильный путь по сравнению с другим методом, описанным выше, или это что-то суперПонятно, что мне не хватает?URI все еще нулевой ...

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

         if (requestCode == PICK_FROM_GALLERY && resultCode == RESULT_OK)
    {
        File filelocation = new File(Environment.getExternalStorageDirectory(), "picture.jpg");
        Uri path = Uri.fromFile(filelocation);
        Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.setType("image/*");
        String to[] = {mailAdressTextField.getText().toString()};
        emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
        emailIntent.putExtra(Intent.EXTRA_STREAM, path);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, messageTextField.getText().toString());

    }

1 Ответ

0 голосов
/ 14 декабря 2018

Я использовал что-то вроде этого.Forked fine

    File filelocation = new File(Environment.getExternalStorageDirectory(), filename);
        Uri path = Uri.fromFile(filelocation);
        Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.setType("vnd.android.cursor.dir/email");
        String to[] = {"email@email.com"};
        emailIntent.putExtra(Intent.EXTRA_EMAIL, to);
        emailIntent.putExtra(Intent.EXTRA_STREAM, path);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your string");
startActivity(Intent.createChooser(emailIntent , "Send email..."));

EDIT

filename - это имя вашего файла с постфиксом (например, .jpg)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...